home *** CD-ROM | disk | FTP | other *** search
/ NeXT Education Software Sampler 1992 Fall / NeXT Education Software Sampler 1992 Fall.iso / Programming / Source / winterp-1.13 / doc / winterp.doc < prev    next >
Encoding:
Text File  |  1991-10-06  |  309.9 KB  |  8,857 lines

  1. -*-Outline-*-
  2.  
  3.  
  4.  
  5.  
  6.  
  7.                  =================
  8.                  = W I N T E R P =
  9.                  =================
  10.  
  11.        T H E   O S F / M O T I F  W I D G E T  I N T E R P R E T E R
  12.  
  13.       An interactive object-oriented user interface language
  14.         for rapid prototyping, development and delivery of
  15.            user-extensible applications with Motif GUIs.
  16.  
  17.  
  18.                    Version 1.13
  19.  
  20.  
  21.                   October 5, 1991
  22.  
  23.  
  24.                     by
  25.                   Niels P. Mayer
  26.            Human-Computer Interaction Department
  27.               Software and Systems Laboratory
  28.                Hewlett-Packard Laboratories
  29.  
  30.  
  31.             Mailing Address:
  32.                  Hewlett Packard
  33.                  Niels Mayer 1U/17
  34.                  P.O. Box 10490
  35.                  Palo Alto, CA  94303-0969
  36.                      
  37.             E-Mail Address:
  38.                              internet: mayer@hplabs.hp.com
  39.                              uucp: hplabs!mayer
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62. ********************************************************************************
  63. * WINTERP Copyright 1989, 1990, 1991 Hewlett-Packard Company (by Niels Mayer).
  64. * XLISP version 2.1, Copyright (c) 1989, by David Betz.
  65. *
  66. * Permission to use, copy, modify, distribute, and sell this software and
  67. * documentation for any purpose is hereby granted without fee, provided that
  68. * the above copyright notice appear in all copies and that both that copyright
  69. * notice and this permission notice appear in supporting documentation, and that
  70. * the name of Hewlett-Packard, Niels Mayer, and David Betz not be used in
  71. * advertising or publicity pertaining to distribution of the software and
  72. * documentation without specific, written prior permission. Hewlett-Packard,
  73. * Niels Mayer, and David Betz make no representations about the suitability of
  74. * this software and documentation for any purpose. It is provided "as is"
  75. * without express or implied warranty.
  76. *
  77. * HEWLETT-PACKARD AND DAVID BETZ DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
  78. * SOFTWARE AND DOCUMENTATION, INCLUDING ALL IMPLIED WARRANTIES OF
  79. * MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL HEWLETT-PACKARD, NIELS
  80. * MAYER, NOR DAVID BETZ BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
  81. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  82. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  83. * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
  84. * THIS SOFTWARE AND DOCUMENTATION.
  85. ********************************************************************************
  86. * Document Version: $Header: winterp.doc,v 1.21 91/10/06 07:16:45 mayer Exp $
  87. ********************************************************************************
  88.  
  89. * Introduction
  90.  
  91. ** Why a Widget INTERPreter?
  92.  
  93. WINTERP is an interpretive, interactive environment for rapid prototyping
  94. applications using the OSF Motif UI Toolkit. The name "WINTERP" stands for
  95. Widget INTERPreter, and that's exactly what WINTERP is -- an interpretive
  96. language that allows programmers to interactively create interfaces using
  97. the capabilities of the Motif widgets and the X11 toolkit intrinsics.
  98. Widgets in the Xtoolkit are dynamic and "interpretive" by nature of their
  99. object-oriented, message passing style of design; they become maximally
  100. useful when driven by an interactive environment like WINTERP.
  101.  
  102. Neither traditional C Xtoolkit applications, nor UIL applications really
  103. take advantage of the interpretive nature of the Xtoolkit. When programming
  104. in C, one is forced to go through tedious compile+edit+test cycles even for
  105. making a trivial change. X and the Xtoolkit provide a fancy widget resource
  106. manager that allow you to shorten the compile+edit+test cycle -- the
  107. Xtoolkit "reinterprets" it's resource settings as a whole each time the
  108. application is brought up; compile+edit+test is shortened to edit+test.
  109. UIL extends the level of data-interpretation a little bit further by
  110. allowing the system to read a structured description of the widget
  111. hierarchy and resources. UIL claims this will allow applications to be
  112. written in such a way that the interface can be drastically altered by
  113. changing the description file. In reality, only the most trivial sorts of
  114. layout changes are possible with UIL because it is not a programming
  115. language, and thus cannot allow you alter the program semantics that are
  116. invariably intertwined with the semantics of the user interface.
  117. Furthermore, UIL still uses compilation, rather than interpretation, which
  118. means application prototyping is still as tedious as ever.  WINTERP
  119. provides both an interpretive interface to the Xtoolkit widgets, and a real
  120. programming language -- this makes it ideal for prototyping and/or
  121. customizing the layout, look, AND functionality of an application.
  122.  
  123. WINTERP's interpreter is based on David Betz's popular XLISP, a small,
  124. fast, C-implemented interpreter with Common Lisp syntax and extensions for
  125. object oriented programming. Full-blown Lisp systems such as Common Lisp
  126. have proven to be very effective prototyping environments and are commonly
  127. used as platforms for building User-Interface Management Systems (UIMS).
  128. WINTERP attempts to deliver the advantages of Lisp to those that cannot
  129. afford the expenses, both monetary and computational, of large systems like
  130. Common Lisp.
  131.  
  132. Lisp is traditionally associated with unwieldy, large, slow and expensive
  133. systems -- Lisp's flexibility has it's costs. One solution to these
  134. problems has been to create special operating systems and hardware to
  135. better support Lisp: The Lisp Machine -- a very expensive, and very
  136. specialized system.  Lisp Machines are losing ground to the general purpose
  137. workstation running UN*X: such machines can be built at relatively low cost
  138. with enough compatibility between vendors that a growing number of UN*X
  139. applications can be run on a variety of hardware vendor platforms.
  140. Unfortunately, attempts at building Lisp-based applications that are good
  141. citizens on UN*X workstations have generally failed because systems such as
  142. Common Lisp (CL) create huge, resource-hungry processes that swap/thrash
  143. out all other applications -- not acceptable if you are trying to create an
  144. application that works alongside other applications running in a
  145. multiprocessing system like UN*X.  While CL platforms will continue to make
  146. excellent prototyping platforms, delivery of applications embedded in a CL
  147. environment is unacceptable. Attempts at recoding CL prototypes under a
  148. delivery platform (e.g. just using UN*X & C) is time consuming, and changes
  149. the feel and the flexibility of an application: applications prototyped
  150. with Common Lisp assume and make use of the underlying features of the Lisp
  151. system; these assumptions must be removed from the design or be recoded in
  152. the delivery language.
  153.  
  154. Fortunately, another class of Lisp application has been successful in a
  155. general purpose computational environment -- a hybrid architecture of Lisp
  156. and C giving the flexibility of a Lisp system while allowing delivery of a
  157. relatively small and efficient process. Under UN*X, Richard Stallman has
  158. created a highly-customizable editor-based programming environment called
  159. GNUEMACS -- this is a system that delivers to the UN*X user a text editor
  160. oriented UI that is the foundation of the Lisp Machine programming
  161. environment. Similarly, under MSD*S successful programs like AUTOCAD
  162. contain a Lisp customization language embedded in a CAD program.  The
  163. approach taken by such hybrid applications is that a small mini-Lisp
  164. interpreter serves to "glue" together efficient C-implemented primitives
  165. that make up an application.  User-customization and prototyping under such
  166. a hybrid system amounts to using the Lisp interpreter to reconfigure
  167. C-implemented building blocks in order to change, modify, or improve the
  168. functionality of the system. Such an application architecture follows the
  169. "80/20 heuristics" for program execution -- low level routines that take up
  170. most of the computational resources are coded in C, and are therefore fast,
  171. and efficient in memory use (no garbage collections caused by low-level
  172. code). The Lisp interpreter is relatively slow in comparison to a compiled
  173. C program, but it only serves to flexibly glue together components of the
  174. "outer loop" of a program.
  175.  
  176. WINTERP was written as a platform for building such hybrid Lisp/C systems;
  177. XLISP makes this possible because, unlike large Common Lisp systems,
  178. integrating arbitrary C-implemented functionality with the Lisp interpreter
  179. is easy.  WINTERP itself is an example of the feasibility of hybrid
  180. programming techniques -- WINTERP's X/Motif functionality is achieved
  181. through XLISP interfaces to the C-implemented Motif toolkit. WINTERP is
  182. thus aimed at the class of application that cannot afford to carry along
  183. all the excesses of Common Lisp, but does require an embedded programming
  184. language for user-customization.
  185.  
  186. WINTERP supports an evolutionary program lifecycle: WINTERP application
  187. writers will rapidly prototype new functionality by using the mini-Lisp
  188. interpreter to interactively refine the layout, looks, and functionality of
  189. the user interface.  Once functionality has stabilized, a programmer will
  190. be able to improve the application's efficiency by reimplementing the
  191. functionality in C while maintaining the same Lisp programmatic interface
  192. to the rest of the system. These new primitives will then serve as the
  193. building blocks for the next layer of prototyping and customization... The
  194. end result, if designed carefully, is a relatively small and fast
  195. application that provides the right set of building blocks and hooks to
  196. permit end-users to customize the look and feel of the application.
  197.  
  198. WINTERP is also useful for rapid prototyping applications that do not need
  199. to be delivered with an embedded customization language. Systems with such
  200. delivery goals may still use the aforementioned application lifecycle. As
  201. the application matures and Lisp prototype code stabilizes, the program can
  202. gradually be recoded entirely into C, eventually allowing a "normal" C
  203. program to be delivered.
  204.  
  205.  
  206. ** Why I built WINTERP:
  207.  
  208. I built WINTERP as a platform for our project in designing, building, and
  209. evaluating Computer Supported Cooperative Work (CSCW) and Collaborative
  210. Multimedia Systems. The usefulness of such systems can rarely be
  211. demonstrated by demoing "laboratory curiosity" applications; evaluating
  212. such technologies requires applications be delivered to early adopters of
  213. the technology with a minimum of extraneous overhead (e.g. runtime
  214. licenses, huge systems) and that the delivered application be customizable
  215. so that it can be integrated into the environment of a particular
  216. workgroup.
  217.  
  218. The project's immediate goal is to develop STRUDEL, a highly configurable
  219. mail/calendar/information management system to enable computer supported
  220. cooperative work.  We intend for STRUDEL to become the "GNUEMACS of
  221. groupware systems".  The Lisp interpreter will permit the system to be
  222. customized to support special modes of communication for particular
  223. workgroup environments much in the same way that emacs-Lisp is used to
  224. customize the editor to support special editing modes for particular
  225. programming environments.
  226.  
  227. In STRUDEL, WINTERP's Lisp interpreter and Motif U.I. primitives will be
  228. used as a description language for creating and processing active/graphical
  229. e-mail forms. Such forms can be sent (as textual programs) through standard
  230. e-mail channels, and the receiving STRUDEL system will interpret the
  231. WINTERP-Lisp forms description language and display a form letter
  232. containing a user interface built from arbitrary combinations of widgets,
  233. bitmaps, as well as voice and video "widgets".  Users will be able to
  234. choose from a library of email forms that are designed to track specific
  235. types of conversations -- scheduling meetings and resources, software
  236. defect tracking, fleshing out design issues, etc.  Workgroups can extend
  237. the library of forms to help capture and manage recurrent conversations
  238. that are not covered by STRUDEL's standard forms library.
  239.  
  240.  
  241. ** Why XLISP?
  242.  
  243. I implemented WINTERP on top of XLISP because it is reliable, small, and
  244. free, thus allowing delivery of applications such as STRUDEL (see above)
  245. with a minimum of overhead (licenses, slow systems requiring specialized
  246. hardware) to potential early adopters of groupware technologies. XLISP has
  247. been around since 1985, and has evolved considerably since it first
  248. appeared publically; because it has been in use for some time it has also
  249. had most bugs shaken out of the system through widespread use. Furthermore,
  250. the newsgroup comp.lang.Lisp.x has been an effective channel for exchanging
  251. information and patches to XLISP. XLISP was designed to be run on PC's;
  252. because it was designed with a limited environment in mind, it has turned
  253. out to be quite fast and memory- efficient while remaining portable across
  254. a variety of architectures ranging from 16 bit PC's to workstations.  And
  255. of course, XLISP's simple object system has enabled an elegant interface to
  256. the object oriented structure of the Xtoolkit and the Motif widgets.
  257. Finally, XLISP is free, thanks to the generosity of David Betz.
  258.  
  259. Many people have asked "Why not scheme?", or "why not emacs-Lisp?"... the
  260. above paragraph should answer that. David Betz's XSCHEME is still under
  261. development, and would not be a good choice as a stable platform. In
  262. particular, XSCHEME does not (yet) have the debugging capabilities of
  263. XLISP.  Other Scheme implementations were too large, and too complicated to
  264. work with given the sorts of changes I needed to make. GNUEMACS' emacs-Lisp
  265. fit the bill in many ways, but unfortunately the code is very intertwined
  266. with GNUEMACS' editor functionality, and the Free Software Foundation's
  267. Copyleft is far too restrictive to be used in potential products built from
  268. WINTERP's technology.
  269.  
  270. "Professional" Common-Lisp systems have many nice features, but
  271. unfortunately, they are big, slow, expensive, and make bad delivery
  272. platforms.  Most CL systems do not come with source code, which makes it
  273. difficult to alter the way these systems work in significant ways (as I
  274. have done with XLISP in WINTERP). Even with source code, CL impedes the use
  275. of hybrid programming techniques mentioned above -- CL systems are often
  276. only implemented in C at the lowest levels, thus making it difficult to
  277. patch in high-level C-implemented functionality that can be used
  278. transparently from Lisp. Finally, Common Lisp programs cannot be
  279. distributed for free -- this means that potential early adopters of our
  280. STRUDEL technology would have to pay CL license fees, attach codeword
  281. modules to their computers (to ensure that license fees have been paid),
  282. and other such "hassles". People eager to try out our STRUDEL technology
  283. may have second thoughts about becoming "early adopters" if they have to
  284. spend money and time (convincing their management to give them the money
  285. and time ...) in order to try out experimental software.
  286.  
  287.  
  288. ** Interactive GUI programming with WINTERP -- the XLISP eval server.
  289.  
  290. When running a Winterp-Lisp application "script", the WINTERP program runs
  291. just like a normal C and Motif program under X windows. The advantage
  292. WINTERP has over other user-interface pseudo-languages (like Motif's UIL or
  293. Brunecky&Smythe's WCL) is that you can interactively create or modify user
  294. interfaces while one's application is up and running. This is essential for
  295. rapid prototyping; this is the reason why WINTERP is a rapid prototyping
  296. environment and UIL and WCL aren't.
  297.  
  298. Many other UI languages including many Lisp interfaces to X (CLX, Garnet,
  299. etc), have separate "modes" for when they are responding to X and
  300. evaluating language input. The problems with such systems is that they do
  301. not allow for interactive prototyping -- when X is active, programmatic
  302. changes cannot be made, and when the language-evaluator is active,
  303. programmatic changes cannot be visualized. WINTERP allows for interactive X
  304. programming because its language-input is implemented via a server socket;
  305. programmatic input is treated as an event that is dispatched from the X
  306. event loop.  The clients of WINTERP's evaluation server are
  307. editors/programming-environments such as GNUEMACS, or any other program
  308. running on other UN*X machines on a network.  Such capabilities are
  309. extremely useful in allowing "remote procedure calls" (RPC) to a
  310. WINTERP-based application.
  311.  
  312. The GNUEMACS editor provides a very elegant and useful environment for
  313. editing Lisp programs and interacting with WINTERP's Lisp eval-server.
  314. Emacs' Lisp-mode will automatically indent your code (C-M-Q == indent-sexp)
  315. and help you catch unmatched parentheses. The file
  316. ./../src-client/winterp.el extends Emacs' Lisp-mode by providing a command
  317. that allows you to send the current Lisp form you are editing off to
  318. WINTERP for evaluation. This allows truly interactive programming because
  319. you need not exit the editor to see the results of your "program"; with
  320. WINTERP's emacs interface, each fragment of Winterp-Lisp code written into
  321. the editor can, at the touch of a button, be evaluated; programmatic
  322. changes affecting the user-interface can be visualized immediately. Note
  323. that WINTERP is architecturally separate from the GNUEMACS editor --
  324. interfaces to other editors are possible, but are not provided in the
  325. standard WINTERP distribution.
  326.  
  327. (I strongly recommend that those that don't know how to use Gnu-Emacs
  328. should learn how -- you'll never be sorry, and besides, Emacs is really the
  329. only editor appropriate for doing Lisp programming. Even commercial Common
  330. Lisp vendors tend to use Gnu-Emacs as the preferred editing environment for
  331. their products, simply because Gnu-Emacs is the best Emacs implementation
  332. running on Unix. Another big advantage to gnu-emacs is that it runs under
  333. Xwindows directly, which means that you can select the Winterp-Lisp
  334. expression you want to evaluate by pointing at it with the mouse...  For
  335. those that do not have Gnu-Emacs on their systems, or who do not want to
  336. learn Gnu-Emacs to use WINTERP, a rudimentary alternative is provided: see
  337. the Winterp-Lisp file ./../examples/w_ctrlpnl.lsp as well as the
  338. descriptipon of the WINTERP Control Panel Below.)
  339.  
  340. The WINTERP distribution contains a simple client program 'wl' (in
  341. ./../src-client/wl) which sends the Lisp s-expression given on its command
  342. line to the Lisp server for evaluation. 'wl' may be embedded in other
  343. programs that need to talk to WINTERP-based applications. 'wl' can also be
  344. called (e.g., via system(2)) from such programs -- that is essentially how
  345. WINTERP gets gnuemacs to talk to it.
  346.  
  347. WINTERP's RPC capabilities can enable better tool integration: different
  348. tools in one's environment can easily communicate with an application built
  349. upon WINTERP. For example, in the aforementioned STRUDEL project, we expect
  350. to integrate the groupware toolkit with traditional, stand alone software
  351. revision control and source control tools so that designers can keep better
  352. track of conversations on-, commitments about-, and issues surrounding-
  353. version ownership, defect and enhancement resolution, etc.
  354.  
  355.  
  356. * Prerequisites and Assumptions.
  357.  
  358. This documentation assumes that you understand object oriented programming
  359. concepts, understand the rudiments of Lisp programming, and know how to
  360. make application user-interfaces using the Xtoolkit.  If not, you should be
  361. able to learn things quite easily by studying and interactively evaluating
  362. the various bits of Winterp-Lisp code in the ./../examples directory.
  363.  
  364. For documentation on XLISP features see the files ./../doc/xlisp.doc,
  365. ./../doc/XlispRef.doc and ./../doc/XlispOOP.doc .
  366.  
  367. This guide assumes that you already have documentation on Motif and the
  368. Xtoolkit. A good overview of programming with widgets is Doug Young's "X
  369. Window Systems: Programming and Applications with Xt."  I also expect that
  370. you have the Motif programming guide, the Motif manual pages, etc.  This
  371. document will hopefully allow you to understand how to translate the
  372. examples and topics discussed in those programming guides into
  373. WINTERP-Lisp.
  374.  
  375. Names in Xtoolkit and Motif contain mixed case. Since XLISP symbols are
  376. case-insensitive, all the Motif/Xtoolkit names in WINTERP contain an
  377. underscore in place of a lowercase-to-uppercase transition in the name, eg,
  378. xmPushButtonWidgetClass becomes XM_PUSH_BUTTON_WIDGET_CLASS, and the
  379. resource XmNinput becomes :XMN_INPUT. All the Xtoolkit/Motif C names are
  380. listed in close proximity to the Winterp-Lisp names for equivalent
  381. functions. Therefore, to look up the Xtoolkit name "XtFoo", use your editor
  382. to search (in Gnu-Emacs, use i-search) for occurences of "XtFoo" in this
  383. document. This document is written in plain-text so as to make it easier to
  384. use on-line -- if you are viewing it in emacs, you will find some of the
  385. outline-mode commands useful.
  386.  
  387. WINTERP version 1.11 supports OSF/Motif 1.1 and OSF/Motif 1.1.1. The source
  388. has been #ifdef'd for backwards compatibility for people still using Motif
  389. 1.0 -- the same source may be used to provide binaries for WINTERP running
  390. either version of Motif. This document is also "#ifdef'd" so as to indicate
  391. which names and functionality apply to Motif 1.0, and to indicate new
  392. functionality brought on by Motif 1.1. Descriptions in this document that
  393. apply only to Motif 1.1 (and Motif 1.1.1) are bracketed by "#ifdef MOTIF_1.1"
  394. and "#endif /* MOTIF_1.1 */".  Description pertaining only to
  395. Motif 1.0 are bracketed by "#ifdef MOTIF_1.0" and "#endif /* MOTIF_1.0 */".
  396.  
  397.  
  398. * Introduction to XLISP objects and Widgets.
  399.  
  400. WINTERP uses XLISP's object system as its interface to the class hierarchy
  401. of widgets provided by Motif. Specifically, each Motif widget class is
  402. represented by one or more object classes in WINTERP.  In order to best
  403. understand the capabilities of WINTERP's Motif interface, a brief review of
  404. the XLISP object system is in order. You may also want to consult the XLISP
  405. documentation ./../doc/xlisp.doc and ./../doc/XlispRef.doc for a more
  406. precise definition of the object system. Further examples may be found in
  407. file ./../doc/XlispOOP.doc, Tim Mikkelsen's "XLISP 2.0 OBJECTS PRIMER."
  408.  
  409. XLISP Classes describe the type of a particular object by declaring a set
  410. of variables held in each object. These "instance variables" may only be
  411. accessed by "methods" that respond to "messages" sent to the object.
  412. Methods are defined for particular classes, and functionality of other
  413. classes may be incorporated into new classes via "inheritance". From XLISP,
  414. Motif widget classes look just like normal XLISP objects -- that means that
  415. you can easily extend the functionality of Motif widgets by adding your own
  416. methods to a particular widget class. You may also use inheritance to
  417. attach your own data structures to widgets. The result is that WINTERP
  418. provides a very clean way to interactively rapid-prototype an application,
  419. while also providing mechanisms for code structuring and reuse.  The latter
  420. is necessary in evolving from prototype to a structured, maintainable, and
  421. customizable deliverable.
  422.  
  423.  
  424. ** Creating new objects.
  425.  
  426. Create a new instance of a class by sending the message :NEW to
  427. <a_class_instance>:
  428.  
  429.     (SEND <a_class_instance> :NEW <parameters>)
  430.  
  431. <a_class_instance> is in fact an instance of class CLASS. Class CLASS allows
  432. you to define new class instances by specifying the instance variables and
  433. parent class of a particular class.
  434.  
  435.  
  436. ** Declaring a class.
  437.  
  438. To declare a "base class" object, that is, an object with no parent object,
  439. just send message :NEW to the object <CLASS>
  440.  
  441.     (SEND CLASS :NEW '(<ivar0> ... <ivarN>)
  442.              ['(<cvar0> ... <cvarM>)])
  443.  
  444. '(<ivar0> ... (ivarN>) are a list of symbols. Each <ivar-i> names an
  445. instance variable of the class. '(<cvar0> ... <cvarM>)]) are an optional
  446. list of variables that are shared among all instances of that particular
  447. class.
  448.  
  449.  
  450. ** Defining methods.
  451.  
  452. When a "message" is sent to an object, XLISP searches for a "method" to
  453. answer the message. A method is a piece of Lisp code that is executed when
  454. a particular message is sent to an object. Within the code of a method, all
  455. object instance and class variables are accessible. Furthermore, the symbol
  456. 'self' is bound to the object the message was sent to.
  457.  
  458. Methods are defined by sending the message :ANSWER to <a_class_instance>:
  459.  
  460.     (SEND a_class_instance :ANSWER <:msg> <parameters> <code>)
  461.  
  462. where <:msg> is a keyword symbol (a symbol with a ':' prefix) representing
  463. the message; <parameters> are the arguments given along with the message.
  464. See the documentation on "lambda lists" in /winterp/doc/xLisp.doc p.12 for
  465. details.  <code> is a list of s-expressions which get evaluated in response
  466. to a message. The lexical environment that existed for the call to :ANSWER
  467. will be used for value and functional bindings during method evaluation.
  468.  
  469. If you need to remember what the syntax is, consider the memory-helper
  470.     "this class :ANSWERs to :MESSAGE..." == (send <cls> :ANSWER :MESSAGE ...)
  471.  
  472.  
  473. ** Inheritance
  474.  
  475. So far, the object system we just described supports *encapsulation*.
  476. Encapsulation is good programming practice because it helps localize and
  477. detangle complexity. Unfortunately, encapsulation runs counter to
  478. flexibility because making flexible use of an object may require that
  479. certain groups of instance variables be accessed by different layers of new
  480. functionality. Most often, one wants to *reuse* aspects of a particular
  481. class in creating code that specializes and alters the functionality of
  482. that class. A compromise between encapsulation and flexibility is found by
  483. using *inheritance* in an object system. Inheritance is used to allow a
  484.  *subclass* to specialize the functionality of it's *parent class* (aka,
  485. the *superclass*):
  486.  
  487.     (send Class :NEW '(<ivar0> ... <ivarN>)
  488.                          '(<cvar0> ... <cvarM>)
  489.              <superclass>)
  490.  
  491. (<ivar0> ... <ivarN>) is a list of new instance variables in the subclass;
  492. (<cvar0> ... <cvarN>) is a list of new class variables in the subclass;
  493. <superclass> is a class instance representing the parent from which
  494. the new subclass inherits variables and methods.
  495.  
  496. "Inheritance" is occurring because all the instance variables of all the
  497. parent classes of the new subclass become the variables of each subclass
  498. instance. Furthermore, all methods defined on a parent class may also be
  499. used on a subclass instance. Note that while a subclass' methods can access
  500. the variables defined on the parent classes, the reverse isn't true.
  501.  
  502.  
  503. ** Object initialization.
  504.  
  505. As mentioned earlier, new object instances are created by sending the
  506. message :NEW to a class object. Sending the message :NEW to a class
  507. automatically sends message :ISNEW to the newly created instance. By
  508. default :ISNEW on an instance is a no-op method defined on class 'Object',
  509. which is the implicit [(grand)*]parent of all instances. If you want to
  510. initialize the instance/class variables of a particular class, you must
  511. define an :ISNEW method on the class.  Any parameters originally sent to
  512. the :NEW method will be passed on to the :ISNEW method and may be used to
  513. initialize an object to outside-world parameters.
  514.  
  515.  
  516. ** Example of using OOP features of XLISP with Motif widgets:
  517.  
  518. The current implementation of the Motif widget class xmListWidgetClass
  519. makes it less-than-straightforward to create "browsers" of dynamic
  520. information.  The problem is that a "browser" is a kind of application that
  521. lends itself to object oriented techniques that are not always
  522. straightforward to support in C. One often has a collection of 'things'
  523. that one wants to display in a 'list' and perform actions on the 'thing'
  524. corresponding to the visual selection of an element in the displayed list.
  525. xmListWidgetClass will display an array of XmStrings in a list. When one
  526. or more elements in the list are selected, XmStrings corresponding to the
  527. selected elements are returned. Since the XmStrings you put into the list
  528. widget are not the XmStrings you get out, you must call XmStringCompare on
  529. each element of the collection of 'things' to find out which 'thing' was
  530. selected.  Presumably, you'll want to do more than just get back an
  531. XmString...  normally one will want to access data structures associated
  532. with the 'thing' so as to perform an action dependent on those structures.
  533. This could be done with a lookup table, but there's also a better way...
  534.  
  535. WINTERP allows us to subclass the Motif list widget so as to make it have
  536. the kind of functionality we want. This subclass will contain an additional
  537. instance variable 'items' which is an array of arbitrary XLISP objects to
  538. be displayed in a textual browser made from the list widget. These objects
  539. can have completely different internal representations -- the only
  540. requirement is that they follow the protocol of being able to respond to
  541. the messages :DISPLAY_STRING and :DEFAULT_ACTION. :DISPLAY_STRING returns a
  542. string representation of the object to be displayed in the browser.
  543. :DEFAULT_ACTION is the action to be performed when a list item is browsed
  544. (by double clicking on the item).
  545.  
  546. The following creates the subclass <List_Browser> from superclass
  547. <XM_LIST_WIDGET_CLASS>:
  548.  
  549.     (setq List_Browser
  550.         (send Class :NEW        ;create a class inst
  551.             '(items)        ;new instance vars
  552.             '()            ;no class vars
  553.             XM_LIST_WIDGET_CLASS))    ;superclass
  554.  
  555. So now all instances of <List_Browser> will contain an instance variable
  556. <items> and will respond to all the messages understood by the
  557. XM_LIST_WIDGET_CLASS. We want our list browser to behave as described
  558. above, so we define an :ISNEW method to initialize instance variable
  559. <items> to the list of arbitrary objects to be displayed.  <items> gets
  560. initialized to an array of objects, the list widget is created, and a
  561. XmNdefaultActionCallback is setup so that a double click will send the
  562. message :DEFAULT_ACTION to the browsed item:
  563.  
  564.     ;; (send List_Browser :new <items_list> <args-for-the-list-widget>)
  565.     ;; <items_list> is a list of BROWSER_OBJECTs as described above.
  566.     ;; <args-for-the-list-widget> -- these are the arguments that
  567.     ;;       will be passed on to the list widget
  568.     ;;
  569.     (send List_Browser :answer :isnew '(items_list &rest args)
  570.           '(
  571.         (let* (
  572.                (items_end_idx (length items_list))
  573.                (display_items (make-array items_end_idx)))
  574.  
  575.           ;; initialize the 'items' instance variable so that it
  576.           ;; holds all the BROWSER_OBJECTs passed in <items_list>
  577.           (setq items (make-array items_end_idx)) ;create the array
  578.           (do (                         ;copy elts from list to array
  579.                (i    0          (1+ i))
  580.                (elts items_list (cdr elts)))
  581.               ;; loop till no more elts
  582.               ((null elts))
  583.               ;; loop body
  584.               (setf (aref items i) (car elts))
  585.               (setf (aref display_items i) 
  586.                 (send (car elts) :display_string))
  587.               )
  588.  
  589.           ;; initialize the widget, passing in the browser items.
  590.           (apply 'send-super `(:isnew
  591.                        ,@args
  592.                        :xmn_selection_policy :browse_select
  593.                        :xmn_items ,display_items
  594.                        :xmn_item_count ,items_end_idx
  595.                        ))
  596.           )
  597.  
  598.         ;; set up a callback on the list widget initialized above such
  599.         ;; that a double click on the browser-item will send the
  600.         ;; message :default_action to the BROWSER_OBJECT.
  601.         (send-super :add_callback :xmn_default_action_callback
  602.                 '(callback_item_position)
  603.                 '((send (aref items (1- callback_item_position))
  604.                     :default_action))
  605.                 )
  606.         )
  607.           )
  608.  
  609.  
  610. In the above code, SEND-SUPER works just like send, except that it doesn't
  611. require you to give it the object to send the message to.  Instead, it
  612. implicitly assumes that it will be called from within a method, and will
  613. automatically send the message to a superclass of the object's class.  The
  614. (apply 'send-super ...) form is actually calling the :ISNEW (instance
  615. initializer) method on XM_LIST_WIDGET_CLASS, which actually creates the
  616. widget via XmCreateList() or XmCreateScrolledList(). The APPLY '`'
  617. (BACKQUOTE) and '&rest args' (LAMBDA LIST) features of Lisp allow us to
  618. splice in the argument list passed to the instance of List_Browser into the
  619. function that actually creates the widget. Finally, method :ADD_CALLBACK is
  620. the WINTERP equivalent of XtAddCallback(). See the documentation on methods
  621. on WIDGET_CLASS for more details.
  622.  
  623. The Motif List widget also defines a number of "methods" implemented as C
  624. routines such as XmListAddItem(), XmListAddItemUnselected(),
  625. XmListDeleteItem(), and XmListDeletePos(). In WINTERP, we define these as
  626. methods :ADD_ITEM, :ADD_ITEM_UNSELECTED, :DELETE_ITEM, and :DELETE_POS
  627. respectively. Since these methods modify the collection of objects
  628. represented by the list widget, we must update the internal array of
  629. objects <items> to correspond with the items displayed. We do this by
  630. intercepting those messages to the superclass of class <List_Browser> and
  631. handle them in <List_Browser> so as to update the appropriate data:
  632.  
  633.     (send List_Browser :answer :ADD_ITEM '(item position)
  634.           '(
  635.         (setq items (array-insert-pos items (1- position) item))
  636.         (send-super :add_item 
  637.                 (send item :display_string) 
  638.                 position)
  639.         )
  640.           )
  641.  
  642.     (send List_Browser :answer :ADD_ITEM_UNSELECTED '(item position)
  643.           '(
  644.         (setq items (array-insert-pos items (1- position) item))
  645.         (send-super :add_item_unselected 
  646.                 (send item :display_string)
  647.                 position)
  648.         )
  649.           )
  650.  
  651.     (send List_Browser :answer :DELETE_ITEM '(item)
  652.           '(
  653.         ;; this is too lame to implement... requires that we compare
  654.         ;; item with the result of :display_string done on every elt
  655.         ;; of ivar 'items'
  656.         (error "Message :DELETE_ITEM not supported in List_Browser")
  657.         )
  658.           )
  659.  
  660.     (send List_Browser :answer :DELETE_POS '(position)
  661.           '(
  662.         (setq items (array-delete-pos items (1- position)))
  663.         (send-super :delete_pos position)
  664.            )
  665.          )
  666.  
  667. To see how this subclassed list browser is used, and also to see how one
  668. might write a sample application in WINTERP using the object oriented
  669. features of XLISP, see ./../examples/grep-br.lsp.  That file
  670. implements a simple search browser based on the UN*X command 'grep'. See
  671. also ./../examples/mail-br.lsp to see how you can build a simple
  672. mh-based mail browser. Finally, as another example of subclassing Motif
  673. widgets, see ./../examples/radiobox2.lsp.
  674. ==============================================================================
  675.  
  676. * Running WINTERP:
  677.  
  678.     WINTERP can run as a stand-alone application which loads
  679.     one or more Winterp-Lisp files upon startup -- these files create
  680.     the user interface and describe the programmatic actions to be
  681.     carried out by the user interface. When prototyping an application
  682.     in WINTERP, interactive    changes    to the user-interface or
  683.     application code can be effected by sending lisp code to WINTERP's
  684.     eval-server. The program 'wl' is the client for the eval-server.
  685.     The WINTERP gnuemacs editor interface (../src-client/winterp.el)
  686.     provides a higher level interface to WINTERP's language evaluator.
  687.     The Winterp-Lisp file ../examples/w_ctrlpnl.lsp provides a Motif
  688.     interface for programming WINTERP.
  689.  
  690.     Due to portability problems with calling XtAppAddInput() on
  691.     a buffered file such as stdin (the UN*X standard input), WINTERP
  692.     cannot take its input directly from the "tty" or terminal
  693.     emulator -- you must use the client program 'wl' for inputing
  694.     Lisp into WINTERP.
  695.  
  696.     The WINTERP client program 'wl' (stands for Winterp Lisp) sends the
  697.     XLISP expression given on it's command line to the WINTERP server
  698.     (a Unix Domain socket, by default; TCP/IP sockets are optionally
  699.     available as well). A higher level interface is provided in the form
  700.     of a Gnu-Emacs extension: at the touch of a button, the expression
  701.     currently being    edited is sent to WINTERP for evaluation.
  702.  
  703.     The Winterp-Lisp file ./../examples/w_ctrlpnl.lsp provides a simple
  704.     control panel for WINTERP which allows control of the interpreter's
  705.     debugger, as well as a file browser allowing selection of files to
  706.     be loaded or edited. The editor in the controlpanel provides a
  707.     rudimentary means of interacting with Winterp's XLISP evaluator;
  708.     while this is nowhere near as elegant as using the Gnu-Emacs
  709.     interface, it provides a reasonable way-out for non Emacs-literate
  710.     folks. Note however that I've spent a minimum of time on the 
  711.     editor interface in the control panel -- I can't justify spending
  712.     time on such an interface when almost everybody using WINTERP in my lab
  713.     (HPL's Software and Systems Lab) knows emacs. (I will gladly
  714.     accept submitted improvements on the editor in
  715.     ./../examples/w_ctrlpnl.lsp from those that make use of it.)
  716.  
  717.     Since an interactive session with WINTERP will print useful
  718.     information on it's standard output and standard error streams, it
  719.     is best to run the 'winterp' program in a terminal emulator window
  720.     provided by 'xterm' (HPUX users may prefer 'hpterm'). Alternately,
  721.     gnu-emacs users may find it more convenient to run 'winterp' in
  722.     a shell process under emacs -- you may start a shell process by
  723.     using the emacs command M-X shell.
  724.  
  725.  
  726. ** Unix Domain Socket vs. TCP/IP socket:
  727.  
  728.     WINTERP has a number of compilation and run-time options
  729.     configuring how the eval-server is set up. The default compilation
  730.     of WINTERP enables only a Unix Domain Socket -- the socket is
  731.     created at startup by default. The Unix Domain Socket can be
  732.     disabled via an X resource (see "WINTERP Resources" below), and can
  733.     be enabled/disabled via a command-line argument (see "WINTERP --
  734.     the WINTERP Lisp server" below). Note that the Unix Domain Socket
  735.     eval-server's client program is 'wl'.
  736.     
  737.     One may enable the TCP/IP socket capability by recompiling WINTERP
  738.     with the line "#define WINTERP_WANT_INET_SERVER" added to
  739.     ../src-server/config.h. Even when WINTERP is compiled with this
  740.     option, the TCP/IP socket will not be enabled by default. This
  741.     socket may be enabled via a command line option or an X resource.
  742.     Note that the TCP/IP client program, 'wl-tcpip', is not compiled
  743.     by default because WINTERP doesn't need it.
  744.  
  745.     The reason for disabling the TCP/IP socket is due to reasons of
  746.     security. If you run WINTERP on a known port number, without any
  747.     security precautions (see inetd.sec(4)), you are giving people 
  748.     open access to your account -- for example, others users will be
  749.     able to execute programs on your account through the SYSTEM and
  750.     POPEN primitives.
  751.  
  752.     By default, the program 'wl-tcpip' attempts to connect to the
  753.     WINTERP server through your machine's loopback address, which it
  754.     assumes is 127.0.0.1. If that is not your loopback address (isn't
  755.     that IP address standard??), then you may have to specify
  756.     'localhost' or the hostname of your machine. 'wl-tcpip' will be
  757.     able to connect to the WINTERP server more quickly if it can get an
  758.     IP address without having to do a gethostbyname(). That's why I
  759.     hardcoded the loopback address into wl-tcpip.c... (If this lookup
  760.     is too slow, and you are running 'winterp' and 'wl-tcpip' locally,
  761.     you may prefer using the Unix Domain Socket server mentioned
  762.     below.)
  763.  
  764.     In contrast to the TCP/IP socket, the Unix Domain Socket is secure
  765.     for single-user workstations. Since the Unix domain Socket is a
  766.     Un*x file, security on multi-user machines is achieved via
  767.     traditional file-protection techniques -- make the file
  768.     unreadable/unwritable by others. To do this, you may change the
  769.     name/location of the Unix Domain socket file via an environment
  770.     variable, X resource, or command-line argument.
  771.  
  772.     A delivered application which doesn't need to talk to other
  773.     programs may just load it's initialization file and not create any
  774.     server socket at all. If WINTERP is compiled with both server
  775.     options enabled, then one can run WINTERP with both a TCP/IP and
  776.     Unix domain socket.
  777.     
  778.     If for some reason your machine or OS does not support Unix Domain
  779.     Sockets, you may turn off compilation of these features. Do this by
  780.     commenting out "#define WINTERP_WANT_UNIX_SERVER" in
  781.     ../src-server/config.h and recompiling ../src-server/.
  782.  
  783.  
  784. ** WINTERP Resources (~/.Xdefaults):
  785.  
  786.     WINTERP is a standard Xtoolkit program. Any widgets you create will
  787.     be affected by resource-manager settings just like they would in a
  788.     normal program. 
  789.  
  790.     In addition to resources for individual widgets, the following
  791.     set up WINTERP's global application-resources. The default values
  792.     are listed inside '[' and ']'.
  793.  
  794.     Winterp.lispInitFile: [initialize.lsp]
  795.  
  796.         By default, `pwd`/"initialize.lsp" is the XLISP initialization
  797.         file that WINTERP attempts to load when it starts up. I
  798.         strongly suggest that you set this resource to point to a
  799.         file that is a copy of     ./../examples/initialize.lsp".
  800.         "initialize.lsp" contains some important macros and default
  801.         settings for making WINTERP and XLISP run correctly.
  802.  
  803.         I suggest doing the following: copy ./../examples/initialize.lsp
  804.         to <homedir>/.winterp, and set resource
  805.         "Winterp.lispInitFile: <homedir>/.winterp".
  806.         From there, you should customize .winterp so that XLISP
  807.         and WINTERP work like you want them to. There are a number
  808.         of global variables described in xlisp.doc which you may
  809.         set to alter XLISP's behavior. See commented out sections in
  810.         initialize.lsp for WINTERP customizations.
  811.  
  812.         One interesting customization you may want to make is to load
  813.         ./../examples/w_ctrlpnl.lsp" out of your WINTERP
  814.         initialization file. This will provide WINTERP with a rudimentary
  815.         "control panel" allowing you to directly turn on/off the
  816.         debugger, toggle output of backtraces on errors, maneuver
  817.         between debug levels. The controlpanel also provides a
  818.         file-selection-box widget for browsing and loading winterp-lisp
  819.         files, and an editor for editing and evaluating code.
  820.  
  821.         Note: For delivering applications that know how to load
  822.         their own lisp files, I suggest writing a script that does
  823.         whatever you need it to and then executes
  824.         "winterp -class <Application>". The command line argument
  825.         -class causes WINTERP to use application-default file
  826.         /usr/lib/X11/app-defaults/<Application>. That file in turn
  827.         contains any resources needed by <Application>,
  828.         with the resource Winterp.lispInitFile set to <Application>'s
  829.         initialization file. That file in turn loads the application
  830.         itself.
  831.  
  832.     Winterp.lispLibDir: [./]
  833.  
  834.         This resource sets the path to the default directory used
  835.         by the LOAD primitive. If you give an unqualified filename
  836.         <file> to LOAD, it will attempt to load
  837.         <lispLibDir>/<file>.lsp . By default, this directory is
  838.         WINTERP's current working directory `pwd`.
  839.  
  840.         I suggest that you set this resource to
  841.         "<path>/winterp/examples/" , where <path> is the fully
  842.         qualified pathname to the WINTERP distribution files.
  843.  
  844.     Winterp.lispTranscriptFile: [<none>]
  845.  
  846.         If you set this, XLISP will use the DRIBBLE primitive to
  847.         write out a transcript of your interactions with the Lisp
  848.         interpreter. By default, this is not done.
  849.  
  850.     Winterp.enableInitMsgs: [true]
  851.  
  852.         By default, this resource is set to "true", causing WINTERP
  853.         to send its initialization messages to the standard output. 
  854.         WINTERP-based applications may want to put an application
  855.         specific initialization message; for such cases WINTERP's
  856.         initialization messages may be disabled by setting this 
  857.         resource to "false".
  858.  
  859.     Winterp.enableXtErrorBreak: [true]
  860.  
  861.         By default, WINTERP will signal an XLISP break when the
  862.         Xtoolkit signals an error (via XtError()). When this
  863.         resource is "true", Xtoolkit errors will print an error
  864.         message and signal a Lisp error -- the Lisp call-sequence
  865.         (or callback) that caused the error will terminate, however
  866.         WINTERP will be able to execute other callbacks, input from
  867.         the XLISP eval-server, etc.
  868.  
  869.         Setting the resource to "false" will cause WINTERP not to
  870.         signal an XLISP break when the Xtoolkit signals an error (via
  871.         XtError()); when this argument is specified, Xtoolkit
  872.         errors will print an error message on stderr and cause
  873.         WINTERP to exit.
  874.  
  875.     Winterp.enableXtWarningBreak: [false]
  876.  
  877.         By default, this resource is "FALSE", meaning that WINTERP
  878.         will not signal an XLISP break when the Xtoolkit gives a
  879.         warning (via XtWarning()) -- the error message will appear
  880.         on stderr and execution will continue.
  881.  
  882.         When this resource is "TRUE", Xtoolkit warnings will print
  883.         an error message and signal a Lisp error -- the Lisp
  884.         call-sequence (or callback) that caused the warning will
  885.         terminate, however WINTERP will be able to execute other
  886.         callbacks, input from the XLISP eval-server, etc.
  887.  
  888.         Note that I've seen problems when setting 
  889.         enableXtWarningBreak: TRUE, thus the default value of FALSE.
  890.         This is done because some XtWarnings were not meant to be
  891.         broken out-of and can leave Motif in a weird state, causing
  892.         possible subsequent strange behavior, core-dumps, etc.
  893.  
  894.         An example of this problem is associated with a Motif 1.1
  895.         popup menu bug. When a shell associated with a popup menu
  896.         is destroyed, the following spurious warning is printed
  897.             error: X Toolkit Warning:
  898.                     Attempt to remove non-existant passive grab
  899.         When enableXtWarningBreak is set to TRUE, and the above
  900.         warning occurs, subsequent attempts to close a window
  901.         through the window manager will result in the error:
  902.             XIO:  fatal IO error 32 (Broken pipe) on X server...
  903.  
  904.     Winterp.enableXErrorBreak: [true]
  905.  
  906.         By default, WINTERP will signal an an XLISP break when
  907.         the X server or X library signals an error (via XError()).
  908.         When this resource is "true", X errors will print an error
  909.         message and signal a Lisp error -- the Lisp call-sequence
  910.         (or callback) that caused the error will terminate, however
  911.         WINTERP will be able to execute other callbacks, input from
  912.         the XLISP eval-server, etc.
  913.  
  914.         Setting the resource to "false" will cause WINTERP not to
  915.         signal an XLISP break when the X library/server signals an
  916.         error (via XError()); when this argument is specified, X
  917.         errors will print an error message on stderr and cause
  918.         WINTERP to exit.
  919.  
  920.     Winterp.enableUnixServer: [true]
  921.         
  922.         By default, this resource is set to "true", meaning that
  923.         WINTERP    will set up a Unix Domain Socket for input to
  924.         WINTERP's eval-server. Setting this resource to "false"
  925.         will disable the eval-server. Note that this resource is
  926.         only available on WINTERPs compiled with
  927.         "#define WINTERP_WANT_UNIX_SERVER" in file
  928.         "./../src-server/config.h"
  929.  
  930.     Winterp.unixSocketFilepath: [/tmp/.winterp_serv]
  931.  
  932.         This resource sets the pathname for the Unix Domain Socket
  933.         eval-server. By default, ".unixSocketFilepath" is
  934.         "/tmp/.winterp_serv", you may want to specify a different
  935.         ".unixSocketFilepath" if multiple 'winterp' applications are
  936.         running. Alternately, you may want to hide the Unix Domain
  937.         Socket from other users if you are on a multi-user machine.
  938.         Note that specifying environment variable
  939.         WINTERP_UNIX_SOCKET_FILEPATH overrides ".unixSocketFilepath".
  940.  
  941.         Note that this resource is only available on
  942.         WINTERPs compiled with "#define WINTERP_WANT_UNIX_SERVER"
  943.         in file    "./../src-server/config.h" -- WINTERP_WANT_UNIX_SERVER
  944.         is defined by default in WINTERP.    
  945.  
  946.     Winterp.enableInetServer: [false]
  947.  
  948.         By default, this resource is set to "false", meaning that
  949.         WINTERP will not set up a TCP/IP socket for input to 
  950.         WINTERP's eval-server. Setting this resource to "true"
  951.         will enable the TCP/IP eval-server. 
  952.         Note that this resource is only available on
  953.         WINTERPs compiled with "#define WINTERP_WANT_INET_SERVER"
  954.         in file    "./../src-server/config.h"
  955.  
  956.     Winterp.servicePort: [23751]
  957.  
  958.         23751 is the default port number of the TCP/IP server.
  959.         If you change this, you'll also have to change the port number
  960.         that the winterp client 'wl-tcp' uses to connect with WINTERP --
  961.         see the '-p' option of 'wl-tcpip'. Resource ".servicePort"
  962.         in 'winterp' as well as the service-port used by 'wl-tcpip'
  963.         may be set via environment variable WINTERP_INET_PORTNUM.
  964.         Note that this resource is only available on
  965.         WINTERPs compiled with "#define WINTERP_WANT_INET_SERVER"
  966.         in file    "./../src-server/config.h"
  967.  
  968.     Winterp.serviceName: [widget_interp]
  969.         "widget_interp" is the default service name for
  970.         WINTERP's TCP/IP server if ".servicePort" is set to 0. This
  971.         resource specifies the service name used by the TCP/IP server.
  972.         Note that this resource is only available on
  973.         WINTERPs compiled with "#define WINTERP_WANT_INET_SERVER"
  974.         in file    "./../src-server/config.h"
  975.     
  976.  
  977. ** Usage: The WINTERP Lisp server (./../src-server/winterp):
  978.  
  979.     Calling the following program-name and arguments will invoke
  980.     the WINTERP program itself and set up the eval-server:
  981.  
  982.     usage: winterp  [-class <classname>]
  983.             [-init_file <file.lsp>]
  984.             [-lib_dir <path-to-load-dir>]
  985.             [-transcript_file <file.out>]
  986.             [-no_init_msgs] [-enable_init_msgs]
  987.             [-no_xterr_brk] [-enable_xterr_brk]
  988.             [-no_xtwarn_brk] [-enable_xtwarn_brk]
  989.             [-no_xerr_brk] [-enable_xerr_brk]
  990.             [... Xtoolkit options ...]
  991.              #ifdef WINTERP_WANT_INET_SERVER
  992.             [-serv_port <portnum>]
  993.             [-serv_name <servname>]
  994.             [-no_inet_server] [-enable_inet_server]
  995.              #endif /* WINTERP_WANT_INET_SERVER */
  996.              #ifdef WINTERP_WANT_UNIX_SERVER
  997.             [-no_unix_server] [-enable_unix_server]
  998.             [-unix_socket_file <socket-filepath>]
  999.             #endif /* WINTERP_WANT_UNIX_SERVER */
  1000.  
  1001.         NOTE: the #ifdef/#endif bracketed portions above refer to
  1002.         options    that are optionally built-in when WINTERP is
  1003.         compiled. By default, the WINTERP_WANT_INET_SERVER portions
  1004.         are not compiled in with WINTERP, but the
  1005.         WINTERP_WANT_UNIX_SERVER are. This is explained in more
  1006.         detail above in the section "WINTERP Resources (~/.Xdefaults)"
  1007.         above.
  1008.  
  1009.     [-class <classname>]: this optional argument pair must occur first
  1010.     in the list of command-line arguments. This argument pair tells
  1011.     winterp the name of the application defaults file to use (e.g.
  1012.     /usr/lib/X11/app-defaults/<Classname>, and also sets the default class
  1013.     for all WINTERP top level shells. Note that <classname> should
  1014.     begin with a capital letter. If no [-class <classname>] parameter is
  1015.     given, the application 'winterp' will default to class "Winterp" and
  1016.     will look for an application-default file in
  1017.     /usr/lib/X11/app-defaults/Winterp.
  1018.  
  1019.     [... Xtoolkit options ...]: 'winterp' works just like a standard
  1020.     Xtoolkit/Motif application, and handles all the command line
  1021.     options allowed by the Xtoolkit, e.g. -bg, -fg, -font
  1022.     -display, -geometry, -iconic, -title, -name, -xrm, etc...
  1023.     For more information on these options, see the X11r4 document
  1024.     "X Toolkit Intrinsics -- C Language Interface" chapter 2.3
  1025.     "Parsing the Command Line". Alternately, see the appropriate
  1026.     watered down documentation provided in the Motif users guide.
  1027.  
  1028.     [-init_file <file.lsp>]: this optional argument tells WINTERP to load
  1029.     the Winterp-Lisp file <file.lsp> upon startup. Setting this argument
  1030.     pair does the same thing as supplying the resource
  1031.     "Winterp.lispInitFile: <file.lsp>"
  1032.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1033.  
  1034.     [-lib_dir <path-to-load-dir>]: this optional argument pair sets the
  1035.     default    path used by the Xlisp LOAD primitive for loading files that
  1036.     are not qualified by a directory path.  Setting this argument pair does
  1037.     the same thing as supplying the resource
  1038.     "Winterp.lispLibDir: <path-to-load-dir>"
  1039.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1040.  
  1041.     [-transcript_file <file.out>]: this optional argument sets the file
  1042.     used by the Xlisp DRIBBLE primitive. Setting this argument pair does
  1043.     the same thing as supplying the resource
  1044.     "Winterp.lispTranscriptFile: <file.out>"
  1045.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1046.  
  1047.     [-no_init_msgs]: specifying this argument prevents WINTERP from
  1048.     printing initialization messages to the standard output.
  1049.     Setting this argument does the same thing as supplying the resource
  1050.     "Winterp.enableInitMsgs: false"
  1051.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1052.  
  1053.     [-enable_init_msgs]: specifying this argument enables printing of
  1054.     initialization messages from WINTERP -- this is enabled by default.
  1055.     Setting this argument does the same thing as supplying the resource
  1056.     "Winterp.enableInitMsgs: true"
  1057.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1058.  
  1059.     [-no_xterr_brk]: specifying this argument will cause WINTERP not to
  1060.     call an XLISP break when the Xtoolkit signals an error (via XtError());
  1061.     when this argument is specified, Xtoolkit errors will print an error
  1062.     message    on stderr and cause WINTERP to exit. Setting this argument does
  1063.     the same thing as supplying the resource
  1064.     "Winterp.enableXtErrorBreak: false"
  1065.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1066.  
  1067.     [-enable_xterr_brk]: specifying this argument will cause WINTERP to
  1068.     call an XLISP break when the Xtoolkit signals an error (via XtError())
  1069.     -- this is enabled by default. When this argument is specified,
  1070.     Xtoolkit errors    will print an error message and signal a Lisp error
  1071.     -- the    Lisp call-sequence (or callback) that caused the error will
  1072.     terminate, however WINTERP will be able to execute other callbacks,
  1073.     input from the XLISP eval-server, etc. Setting this argument does the
  1074.     same thing as supplying the resource "Winterp.enableXtErrorBreak: true"
  1075.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1076.  
  1077.     [-no_xtwarn_brk]: specifying this argument will cause WINTERP not to
  1078.     call an XLISP break when the Xtoolkit gives a warning (via XtWarning());
  1079.     when this argument is specified, Xtoolkit warnings will print an error
  1080.     message    on stderr and continue executing. Setting this argument does the
  1081.     same thing as supplying the resource
  1082.     "Winterp.enableXtWarningBreak: false"
  1083.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1084.  
  1085.     [-enable_xtwarn_brk]: specifying this argument will cause WINTERP to
  1086.     call an XLISP break when the Xtoolkit gives a warning (via XtWarning())
  1087.     -- this is enabled by default. When this argument is specified,
  1088.     Xtoolkit warnings will print an error message and signal a Lisp error
  1089.     -- the    Lisp call-sequence (or callback) that caused the error will
  1090.     terminate, however WINTERP will be able to execute other callbacks,
  1091.     input from the XLISP eval-server, etc. Setting this argument does the
  1092.     same thing as supplying the resource "Winterp.enableXtWarningBreak: true"
  1093.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1094.  
  1095.     [-no_xerr_brk]: specifying this argument will cause WINTERP not to
  1096.     call an XLISP break when the X library/server signals an error
  1097.     (via XError()); when this argument is specified, X errors will print an
  1098.     error message on stderr and cause WINTERP to exit. Setting this
  1099.     argument does the same thing as supplying the resource
  1100.     "Winterp.enableXErrorBreak: false"
  1101.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1102.  
  1103.     [-enable_xerr_brk]: specifying this argument will cause WINTERP to
  1104.     call an XLISP break when the X signals an error (via XError())
  1105.     -- this is enabled by default. When this argument is specified,
  1106.     X errors will print an error message and signal a Lisp error
  1107.     -- the    Lisp call-sequence (or callback) that caused the error will
  1108.     terminate, however WINTERP will be able to execute other callbacks,
  1109.     input from the XLISP eval-server, etc. Setting this argument does the
  1110.     same thing as supplying the resource "Winterp.enableXErrorBreak: true"
  1111.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1112.  
  1113.    NOTE: The following command line options are only available if WINTERP
  1114.    was compiled with "#define WINTERP_WANT_UNIX_SERVER" in file
  1115.    "./../src-server/config.h". By default, WINTERP compiles with the
  1116.    Unix Domain Socket server enabled, so these arguments will be available
  1117.    in the default WINTERP.
  1118.  
  1119.     [-no_unix_server]: specifying this argument disables WINTERP's
  1120.     Unix Domain Socket eval-server.  Setting this argument
  1121.     does the same thing as supplying the resource
  1122.     "Winterp.enableUnixServer: false"
  1123.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1124.  
  1125.     [-enable_unix_server]:  specifying this argument enables WINTERP's
  1126.     Unix Domain Socket eval-server -- this is the default.
  1127.     Setting this argument does the same thing as supplying the resource
  1128.     "Winterp.enableUnixServer: true"
  1129.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1130.  
  1131.     [-unix_socket_file <socket-filepath>]: specifying this argument
  1132.     pair sets the Unix Domain Socket specified by <socket-filepath>.
  1133.     By default, <socket-filepath> is "/tmp/.winterp_serv", you may want
  1134.     to specify a different <socket-filepath> if multiple 'winterp'
  1135.     applications are running. Alternately, you may want to hide the
  1136.     Unix Domain Socket from other users if you are on a multi-user machine.
  1137.     Setting this argument does the same thing as supplying the resource
  1138.     "Winterp.unixSocketFilepath: <socket-filepath>"
  1139.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1140.     Note that specifying environment variable WINTERP_UNIX_SOCKET_FILEPATH
  1141.     overrides this command line argument (as well as resource
  1142.     ".unixSocketFilepath").
  1143.     
  1144.    NOTE: The following command line options are only available if WINTERP
  1145.    was compiled with "#define WINTERP_WANT_INET_SERVER" in file
  1146.    "./../src-server/config.h". By default WINTERP does not compile
  1147.    with the TCP/IP server capabilities because they are a potential
  1148.    security hole.
  1149.  
  1150.     [-no_inet_server]: specifying this argument disables WINTERP's
  1151.     TCP/IP eval-server -- this is the default.  Setting this argument
  1152.     does the same thing as supplying the resource
  1153.     "Winterp.enableInetServer: false"
  1154.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1155.  
  1156.     [-enable_inet_server]: specifying this argument enables WINTERP's
  1157.     TCP/IP eval-server. Setting this argument does the same thing as
  1158.     supplying the resource "Winterp.enableInetServer: true"
  1159.     (see "WINTERP Resources (~/.Xdefaults)" above for details).
  1160.  
  1161.     [-serv_port <portnum>]: setting this optional argument pair does
  1162.     the same thing as supplying the resource "Winterp.servicePort: <portnum>"
  1163.     (see "WINTERP Resources (~/.Xdefaults)" above).
  1164.     Note that specifying environment variable WINTERP_INET_PORTNUM
  1165.     overrides this command line argument (as well as resource
  1166.     ".servicePort").
  1167.  
  1168.     [-serv_name <servname>]: setting this optional argument pair does
  1169.     the same thing as supplying the resource "Winterp.serviceName: <portnum>"
  1170.     (see "WINTERP Resources (~/.Xdefaults)" above).
  1171.  
  1172.  
  1173. ** Usage: the WINTERP-Lisp Unix Domain Socket client (./../src-client/wl):
  1174.  
  1175.     usage: wl [-f <socket-filepath>] [<s-expr>]
  1176.  
  1177.         The optional <socket-filepath> argument sets the
  1178.         pathname for the Unix Domain Socket eval-server.
  1179.         By default, <socket-filepath> is "/tmp/.winterp_serv",
  1180.         you may want to specify a different <socket-filepath> if
  1181.         multiple 'winterp' applications are running. Alternately,
  1182.         you may want to hide the Unix Domain Socket from other users
  1183.         if you are on a multi-user machine. Note that you may
  1184.         specify <socket-filepath> via environment variable
  1185.         WINTERP_UNIX_SOCKET_FILEPATH. The environment variable sets
  1186.         <socket-filepath> for both 'wl' and 'winterp'.
  1187.  
  1188.         The <s-expr> argument is a single Lisp s-expression to be
  1189.         sent to WINTERP's Lisp listener. If no <s-expr> argument is
  1190.         given, 'wl' sends an EOF (==^D) to XLISP, indicating that
  1191.         XLISP should exit the current level -- if XLISP is in a
  1192.         "breakloop" due to a Lisp error, this will exist the
  1193.         current "breaklevel". If XLISP isn't in a "breakloop", then
  1194.         omitting the <s-expr> will quit XLISP and cause WINTERP to
  1195.         exit. Note that the <s-expr> must be quoted with ['] so
  1196.         that the shell does not attempt to interpret the
  1197.         parentheses as shell commands.
  1198.  
  1199.  
  1200. ** Usage: the WINTERP-Lisp TCP/IP client (./../src-client/wl-tcpip):
  1201.  
  1202.     usage: wl-tcpip [-h <hostname>] [-p <port>] [<s-expr>]
  1203.     
  1204.         The optional <hostname> argument allows you to specify the
  1205.         host upon which the WINTERP's eval-server is running. By default,
  1206.         'wl-tcpip' attempts to connect to a WINTERP server running
  1207.         at IP address 127.0.0.1. See the note below for further details.
  1208.         The hostname may also be specified by setting environment
  1209.         variable WINTERP_INET_HOSTNAME.
  1210.  
  1211.         The optional <port> argument specifies a different port number
  1212.         for WINTERP's eval-server. The default is 23751; you may
  1213.         want to change the default (along with WINTERP's
  1214.         "Winterp.servicePort" resource) if 23751 is already defined
  1215.         in /etc/services. You will also need to change <port> if you
  1216.         are running multiple instances of WINTERP on the same
  1217.         machine. You may set the <port> argument as well as
  1218.         WINTERP's ".servicePort" by setting environment variable
  1219.         WINTERP_INET_PORTNUM to the desired port number.
  1220.  
  1221.         The <s-expr> argument is a single Lisp s-expression to be
  1222.         sent to WINTERP's Lisp listener. If no <s-expr> argument is
  1223.         given, 'wl-tcpip' sends an EOF (==^D) to XLISP, indicating that
  1224.         XLISP should exit the current level -- if XLISP is in a
  1225.         "breakloop" due to a Lisp error, this will exist the
  1226.         current "breaklevel". If XLISP isn't in a "breakloop", then
  1227.         omitting the <s-expr> will quit XLISP and cause WINTERP to
  1228.         exit. Note that the <s-expr> must be quoted with ['] so
  1229.         that the shell does not attempt to interpret the
  1230.         parentheses as shell commands.
  1231.  
  1232.     NOTE-0: 'wl-tcpip' is not compiled in the WINTERP distribution by
  1233.     default -- do "cc -O -o wl-tcpip wl-tcpip.c" to compile it.
  1234.     Likewise, the 'winterp' binary itself does not compile with the
  1235.     TCP/IP server feature. To get the TCP/IP server, you must recompile
  1236.     WINTERP after setting "#define WINTERP_WANT_INET_SERVER" in
  1237.     ./../src-server/config.h; after recompilation run 'winterp' with the
  1238.     resource "Winterp.enableInetServer: true".
  1239.  
  1240.     NOTE-1: By default, 'wl-tcpip' uses the IP address 127.0.0.1 as the
  1241.     hostname. This is the standard "loopback" or localhost address on
  1242.     all UN*X machines I've worked with. If your setup defines hostname
  1243.     "localhost" as a different I.P. address, you may need to specify
  1244.     'localhost' or `hostname` as <hostname>. You may see significant
  1245.     speed increases in 'wl-tcpip' by replacing "127.0.0.1" in
  1246.     ./../src-server/config.h with the appropriate IP address and
  1247.     recompiling 'wl-tcpip.c' -- hostname lookup on some machines can be slow.
  1248.     If you are really concerned about the speed of making local
  1249.     connections, between 'winterp' and 'wl-tcpip', you should consider
  1250.     using 'wl' as described above.
  1251.  
  1252.  
  1253. ** Usage: the Gnu-Emacs programmers interface (./../src-client/winterp.el):
  1254.  
  1255.     The gnuemacs interface to WINTERP makes the following assumptions:
  1256.     (1) You're using GNUEMACS version 18.54 or later (I've used
  1257.     winterp.el with versions of gnuemacs as old as 18.44, but you may
  1258.     need to load a >18.54 version of lisp/shell.el).
  1259.     (2) You've installed the WINTERP-Lisp client program 'wl' somewhere
  1260.     on your    UX*X search path (see $PATH).
  1261.     (3) The WINTERP-server is running and sending stderr and
  1262.     stdout to a reasonable place such as a terminal emulator.
  1263.  
  1264.     To use WINTERP's GNUEMACS interface, you must first load the file
  1265.     ./../src-client/winterp.el into gnuemacs. You may do this
  1266.     manually by using the command 'M-X load-file<return>' specifying the
  1267.     file 'winterp.el' with the appropriate path information prepended.
  1268.     Alternately, you may include the form '(load "<path>winterp")' in
  1269.     your $HOME/.emacs file, where <path> is the appropriate path to the
  1270.     file ./../src-client/winterp.el.
  1271.  
  1272.     Once winterp.el is loaded, you should visit a WINTERP-Lisp file
  1273.     using GNUEMACS command 'M-X find-file<return>' (C-x C-f). A file with
  1274.     suffix '.lsp' denotes an XLISP or WINTERP-Lisp file, and these will
  1275.     automatically put the associated editor buffer "Lisp mode" -- the
  1276.     GNUEMACS mode line will indicate the mode as '(Lisp)'. Within a
  1277.     Lisp-mode buffer, the following additional commands and keybindings
  1278.     are defined:
  1279.  
  1280.         winterp-send-defun (C-M-X):
  1281.             The Lisp s-expression at the "point" (cursor) is
  1282.             sent to the WINTERP-server for evaluation.
  1283.  
  1284.         winterp-send-buffer:
  1285.             The current buffer is sent to the WINTERP-server
  1286.             for evaluation.
  1287.  
  1288.         winterp-send-exit: (C-c C-d):
  1289.             Sends a ^D == EOF to XLISP, which exists the
  1290.             current breaklevel. If XLISP is not at a
  1291.             breaklevel, then this command will exit XLISP and
  1292.             cause the WINTERP-server to terminate.
  1293.  
  1294.     Additional commands that are useful in GNUEMACS' Lisp-mode:
  1295.  
  1296.         indent-sexp (C-M-Q):
  1297.             Formats and indents the s-expression under the
  1298.             "point" (cursor).
  1299.  
  1300.         indent-for-comment (M-;):
  1301.             Will place a Lisp comment character at the
  1302.             appropriate column in your Lisp-source. If a
  1303.             comment already exists on the current line, this
  1304.             will reindent the comment.
  1305.  
  1306.         forward-list: (C-M-N):
  1307.             Moves the "point" forward across a balanced group
  1308.             of parentheses. This is useful for moving the
  1309.             cursor to the next form.
  1310.         
  1311.         backward-list: (C-M-P):
  1312.             Moves the "point" backward across a balanced group
  1313.             of parentheses. This is useful for moving the
  1314.             cursor to the previous form.
  1315.  
  1316.         forward-sexp: (C-M-F):
  1317.             Moves the "point" forward across one balanced 
  1318.             expression.
  1319.             
  1320.         backward-sexp (C-M-B):
  1321.             Moves the "point" backward across one balanced
  1322.             expression.
  1323.         
  1324.     I have found it useful to bind commands backward-list,
  1325.     forward-list, and winterp-send-buffer to "function" keys F6, F7,
  1326.     and F8, respectively, because these commands are used often when
  1327.     using GNUEMACS to interface with WINTERP.
  1328.     
  1329.     DEBUGGING-TIP: If you are using WINTERP's GNUEMACS interface and
  1330.     functions such as winterp-send-defun are not working correctly, 
  1331.     you should check the GNUEMACS buffer *winterp-client-shell* for
  1332.     error output from the program 'wl'. WINTERP's GNUEMACS interface
  1333.     requires that the winterp client program 'wl' works correctly --
  1334.     see the documentation on 'wl' above for information.
  1335. ==============================================================================
  1336.  
  1337. * Winterp-Lisp global variables.
  1338.  
  1339. WINTERP defines the following global variables:
  1340.  
  1341.     *XLISP_VERSION* --    this is set to a FIXNUM indicating the current
  1342.                 version of XLISP used in WINTERP. For XLISP 2.1
  1343.                 *XLISP_VERSION* == 2.
  1344.  
  1345.     *XLISP_REVISION* --    this is set to a FIXNUM indicating the current
  1346.                 revision of XLISP used in WINTERP. For XLISP 2.1
  1347.                 *XLISP_REVISION* == 1.
  1348.  
  1349.     *MOTIF_VERSION* --    this is set to a FIXNUM indicating the current
  1350.                 version of Motif used by WINTERP. This is the
  1351.                 value of XmVERSION in <Xm/Xm.h>.        
  1352.  
  1353.     *MOTIF_REVISION* --    this is set to a FIXNUM indicating the current
  1354.                 revision of Motif used by WINTERP. This is the
  1355.                 value of XmREVISION in <Xm/Xm.h>.        
  1356.  
  1357.     *WINTERP_VERSION* --    this is set to a FIXNUM indicating the current
  1358.                 revision of WINTERP. For WINTERP 1.11
  1359.                 *WINTERP_VERSION* == 1.
  1360.  
  1361.     *WINTERP_REVISION* --    this is set to a FIXNUM indicating the current
  1362.                 revision of WINTERP. For WINTERP 1.11
  1363.                 *WINTERP_REVISION* == 11.
  1364.  
  1365.     *TOPLEVEL_WIDGET* --    this is set to a WIDGETOBJ, the WINTERP
  1366.                 application's application-shell widget.
  1367.                 By default, this shell-widget is unmapped
  1368.                 and not visible on the screen -- it is used
  1369.                 internally to retrieve application-resources
  1370.                 and certain default X values needed by
  1371.                 WINTERP's internals. However, users may use
  1372.                 this existing shell widget for whatever
  1373.                 purpose they want. Note that Bug-Free operation
  1374.                 of WINTERP is not at all guaranteed if you
  1375.                 destroy this widget.
  1376.  
  1377.                 Also, you'll want to use this widget to retrieve
  1378.                 the command line arguments with which
  1379.                 winterp was invoked. Do this with
  1380.                 (send *TOPLEVEL_WIDGET* :GET_ARGV)
  1381.  
  1382.     *SAVED_OBJS* --        This is set to an ARRAY of WIDGETOBJ,
  1383.                 CALLBACKOBJs, TIMEOUTOBJs. This is really used
  1384.                 only for debugging purposes, as well as 
  1385.                 other hackery on WINTERP's internals.
  1386.                 Bug-Free operation of WINTERP is not at all
  1387.                 guaranteed if you mess with the values in 
  1388.                 this ARRAY.
  1389.  
  1390. ==============================================================================
  1391.  
  1392. * WINTERP <--> Motif Widget Classes
  1393.  
  1394. ** WIDGET_CLASS -- the WINTERP widget metaclass.
  1395.  
  1396.     WIDGET_CLASS is not an instantiable class. It is the base class
  1397.     from which all WINTERP widget-classes inherit methods and
  1398.     functionality from. Note that some widget classes will override
  1399.     methods defined on WIDGET_CLASS.
  1400.  
  1401. *** equivalent Xt 'WidgetClass':
  1402.  
  1403.     There is no direct equivalent. This class is essentially a       
  1404.     combination of classes 'Primitive',  'Core', 'Manager' etc.
  1405.  
  1406. *** equivalent creation convenience function:
  1407.  
  1408.     XtCreateWidget() -- see below.
  1409.  
  1410. *** XtCreateWidget():
  1411.  
  1412.     (send <WIDGET_CLASS> :new [:managed/:unmanaged]
  1413.                   [<name>]
  1414.                   <parent> 
  1415.                   [<resource_0> <value_0>]
  1416.                   . . .
  1417.                   [<resource_n> <value_n>])
  1418.  
  1419.         --> returns a newly created WIDGETOBJ of class
  1420.             <WIDGET_CLASS>.
  1421.  
  1422.     <WIDGET_CLASS> is an XLISP class-object that has been previously
  1423.     been defined, either by compiling it into the C source, or by
  1424.     subclassing existing widgets, or by creating a new composite widget
  1425.     class made out of existing or subclassed widget classes.
  1426.  
  1427.     The optional keyword-argument :MANAGED will cause a subsequent call
  1428.     to XtManageChild() (see also method :MANAGE).
  1429.     If the submessage :UNMANAGED is    present, or no submessage, then
  1430.     XtManageChild() won't be called, and the resulting widget will be
  1431.     returned unmanaged.
  1432.  
  1433.     The optional argument <name> is a string which becomes the
  1434.     name of the widget as used by the resource manager. If you
  1435.     are not setting any widget resources via the resource
  1436.     manager, you may leave this parameter out.
  1437.  
  1438.     The argument <parent> is a WIDGETOBJ that will be managing
  1439.     the widget to be created.
  1440.  
  1441.     The optional arguments [<resource_i> <value_i>]... represent a series
  1442.     of Motif resource name/value pairs -- upon creation of the
  1443.     widget, each <resource_i> will be set to <value_i>. Resource names are
  1444.     keyword symbols which are described in the "WINTERP <--> Motif resources"
  1445.     section of this document. Each <resource_i> expects a specific Lisp
  1446.     type for <value_i> and will signal an error if the wrong type
  1447.     <value_i> is given. For example, the Motif resource XmNx indicates
  1448.     the X-axis location of a widget with respect to it's parent -- the
  1449.     corresponding WINTERP-Lisp symbol :XMN_X will expect it's
  1450.     associated value to be a FIXNUM.
  1451.  
  1452.     Almost all resource values may also be specified as a STRING and
  1453.     Xt&Motif's resource converters will automatically convert the
  1454.     STRING to the appropriate type. The string values may be specified
  1455.     in the same way that you would specify a value for use by the X
  1456.     resource database (e.g. ~/.Xdefaults or /usr/lib/X11/app-defaults/*).
  1457.  
  1458.     Note that different resource names are valid for each particular
  1459.     widget class. See the Motif manual pages on a particular widget
  1460.     class to find out which resources may be set. If you attempt to set
  1461.     a resource that doesn't exist for a particular widget's class, no
  1462.     error will be signaled, and the invalid resource will be ignored.
  1463.     (I consider this behavior is a bug in the design of the Xt
  1464.     intrinsics whereas the X consortium considers this a "feature" of
  1465.     the implementation. WINTERP could ask the toolkit to see whether each
  1466.     specified resource is valid, but that would make execution too
  1467.     slow. Given that the X Consortium will never fix this bug, a future
  1468.     version of WINTERP may allow such checking to occur as an option).
  1469.  
  1470. *** XtSetValues():
  1471.  
  1472.     (send <widget> :SET_VALUES <resource_0> <value_0>
  1473.                    . . .
  1474.                    [<resource_n> <value_n>])
  1475.         --> returns <widget>.
  1476.  
  1477.  
  1478.     This method allows you to set the value of widget resource <resource_i>
  1479.     to value <value_i> for the widget object <widget>. Resource names are
  1480.     keyword symbols which are described in the "WINTERP <--> Motif resources"
  1481.     section of this document. Each <resource_i> expects a specific Lisp
  1482.     type for <value_i> and will signal an error if the wrong type
  1483.     <value_i> is given. For example, the Motif resource XmNx indicates
  1484.     the X-axis location of a widget with respect to it's parent -- the
  1485.     corresponding WINTERP-Lisp symbol :XMN_X will expect it's
  1486.     associated value to be a FIXNUM.
  1487.  
  1488.     Note that different resource names are valid for each particular
  1489.     widget class. See the Motif manual pages on a particular widget
  1490.     class to find out which resources may be set. If you attempt to set
  1491.     a resource that doesn't exist for a particular widget's class, no
  1492.     error will be signaled, and the invalid resource will be ignored.
  1493.     (I consider this behavior is a bug in the design of the Xt
  1494.     intrinsics whereas the X consortium considers this a "feature" of
  1495.     the implementation. WINTERP could ask the toolkit to see whether each
  1496.     specified resource is valid, but that would make execution too
  1497.     slow. Given that the X Consortium will never fix this bug, a future
  1498.     version of WINTERP may allow such checking to occur as an option).
  1499.  
  1500. *** XtGetValues():
  1501.  
  1502.     (send <widget> :GET_VALUES 
  1503.         <resource_0> <place_0>
  1504.         . . .
  1505.         <resource_n> <place_n>)
  1506.         --> returns a list of values corresponding to <place_i>==NIL
  1507.             (see below).        
  1508.  
  1509.     This method accesses values inside the OBJECT <widget> and stores
  1510.     them in Lisp data structures. <place_i> is a the place to put the
  1511.     value associated with widget resource name <resource_i>. Resource
  1512.     names are keyword symbols which are described in the
  1513.     "WINTERP <--> Motif resources" section of this document.
  1514.  
  1515.     If <place_i> is NIL, then <resource_i>'s value is returned by the
  1516.     method as an element in a list of results. If <place_i> is a quoted
  1517.     symbol, then that symbol gets bound to <resource_i>'s value. If
  1518.     <place_i> is a place-form (see documentation on xLisp's 'setf'
  1519.     construct) then <resource_i>'s value will be put in <place_i>,
  1520.     which is one of the following field specifiers:
  1521.                        <sym>                   set value of a symbol
  1522.                        (car <expr>)            set car of a cons node
  1523.                        (cdr <expr>)            set cdr of a cons node
  1524.                        (nth <n> <expr>)        set nth car of a list
  1525.                        (aref <expr> <n>)       set nth element of an array
  1526.                        (get <sym> <prop>)      set value of a property
  1527.                        (symbol-value <sym>)    set value-cell of a symbol
  1528.                        (symbol-function <sym>) set function-cell of a symbol
  1529.                        (symbol-plist <sym>)    set property list of a symbol
  1530.  
  1531.     Note that different resource names are valid for each particular
  1532.     widget class. See the Motif manual pages on a particular widget
  1533.     class to find out which resources may be retrieved. If you attempt
  1534.     to retrieve the value of a resource value that doesn't exist for a
  1535.     particular widget-class, an error will be signaled.
  1536.  
  1537. *** XtAddCallback():
  1538.  
  1539.     (send <widget_instance> :ADD_CALLBACK    <name>
  1540.                         <call_data_binding_names_list>
  1541.                         <code>)
  1542.         --> returns: <callback_id_object> of type CALLBACKOBJ
  1543.  
  1544.     (send <widget_instance> :SET_CALLBACK    <name>
  1545.                         <call_data_binding_names_list>
  1546.                         <code>)
  1547.         --> returns: <callback_id_object> of type CALLBACKOBJ
  1548.  
  1549.     Both these methods add the callback <name> to <widget_instance>.
  1550.     :SET_CALLBACK contains additional code to ensure that only one
  1551.     callback exists per <name>. :SET_CALLBACK is useful when one is
  1552.     prototyping an application and changing callbacks frequently -- you
  1553.     don't have to worry about removing the previous callback with
  1554.     XT_REMOVE_CALLBACK. Note that :ADD_CALLBACK should be used in
  1555.     time-sensitive code, since :SET_CALLBACK is slower.
  1556.  
  1557.     <name> is a resource keyword of type XmRCallback, eg,
  1558.     :XMN_ACTIVATE_CALLBACK, :XMN_ARM_CALLBACK, :XMN_DISARM_CALLBACK.
  1559.     For a list of valid resource names for callbacks, see the
  1560.     "XmRCallback" subheading of the "WINTERP <--> Motif resources" section
  1561.     of this document. Different widget classes support different
  1562.     callback names -- see the Motif manual page for the appropriate
  1563.     widget class to see which callbacks are valid for a particular
  1564.     widget class.  Note that an error will be signaled if an invalid
  1565.     callback <name> is given.
  1566.  
  1567.     <call_data_binding_name_list> is a list of symbols that get bound to
  1568.     data specific to the action on the callback widget. Most
  1569.     widgets return call_data of type XmAnyCallbackStruct:
  1570.         typedef struct
  1571.             {
  1572.               int     reason;
  1573.               Event  *event;
  1574.             } XmAnyCallbackStruct;
  1575.     For such widgets, specifying one or more of the following symbols
  1576.     in the callback    bindings list will bind that symbol's value in the
  1577.     lexical    environment of the callback:
  1578.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  1579.         CALLBACK_REASON -- the reason symbol for the callback
  1580.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  1581.  
  1582.         The symbol CALLBACK_REASON is bound to one of the following
  1583.         symbols during the callback:
  1584.             CR_NONE, CR_HELP, CR_VALUE_CHANGED, CR_INCREMENT,
  1585.             CR_DECREMENT, CR_PAGE_INCREMENT, CR_PAGE_DECREMENT,
  1586.             CR_TO_TOP, CR_TO_BOTTOM, CR_DRAG, CR_ACTIVATE,
  1587.             CR_ARM, CR_DISARM, CR_MAP, CR_UNMAP, CR_FOCUS,
  1588.             CR_LOSING_FOCUS, CR_MODIFYING_TEXT_VALUE,
  1589.             CR_MOVING_INSERT_CURSOR, CR_EXECUTE,
  1590.             CR_SINGLE_SELECT, CR_MULTIPLE_SELECT,
  1591.             CR_EXTENDED_SELECT, CR_BROWSE_SELECT,
  1592.             CR_DEFAULT_ACTION, CR_CLIPBOARD_DATA_REQUEST,
  1593.             CR_CLIPBOARD_DATA_DELETE, CR_CASCADING, CR_OK,
  1594.             CR_CANCEL, CR_APPLY, CR_NO_MATCH, CR_COMMAND_ENTERED,
  1595.             CR_COMMAND_CHANGED, CR_EXPOSE, CR_RESIZE, CR_INPUT.
  1596.             #ifdef MOTIF_1.1
  1597.             CR_GAIN_PRIMARY, CR_LOSE_PRIMARY.
  1598.             #endif /* MOTIF_1.1 */
  1599.  
  1600.         Note that widget classes whose callback call_data isn't of type
  1601.         XmAnyCallbackStruct will override WIDGET_CLASS's
  1602.         :ADD_CALLBACK and :SET_CALLBACK methods and provide a
  1603.         class-specific method that allows retrieval of values from
  1604.         other kinds of Xm*CallbackStructs. These methods will allow
  1605.         additional symbols in <call_data_binding_names_list>.
  1606.         However, all :ADD_CALLBACK and :SET_CALLBACK methods allow
  1607.         for the symbols CALLBACK_WIDGET CALLBACK_REASON and
  1608.         CALLBACK_XEVENT.    
  1609.  
  1610.     <code> is a list of Lisp expressions that are evaluated when the
  1611.     callback occurs. When the callback fires and <code> gets evaluated,
  1612.     the lexical environment that existed for the call to
  1613.     :ADD_CALLBACK/:SET_CALLBACK will be used for value and functional
  1614.     bindings.
  1615.  
  1616.     NOTE: The the callback associated with the returned
  1617.     <callback_id_object> may be removed via XtRemoveCallback() with the
  1618.     WINTERP primitive (XT_REMOVE_CALLBACK <callback_id_object>).
  1619.  
  1620. *** XtRemoveAllCallbacks():
  1621.  
  1622.     (SEND <widget> :REMOVE_ALL_CALLBACKS <name>)
  1623.         --> returns T.
  1624.  
  1625.     <name> is a resource keyword of type XmRCallback, eg,
  1626.     :XMN_ACTIVATE_CALLBACK, :XMN_ARM_CALLBACK, :XMN_DISARM_CALLBACK.
  1627.  
  1628.     This method removes all callbacks matching <name> from <widget>.
  1629.  
  1630.     WARNING: (from Motif 1.1 README file):
  1631.         Calling this routine from an application removes all callbacks
  1632.         from a widget, including those added internally by Motif code.
  1633.         An application should use XtRemoveCallback or XtRemoveCallbacks
  1634.         to remove particular callbacks.
  1635.  
  1636. *** XtHasCallbacks():
  1637.  
  1638.     (SEND <widget> :HAS_CALLBACKS <name>)
  1639.         --> returns CALLBACK_NO_LIST if callback <name> doesn't exist.
  1640.         --> returns CALLBACK_HAS_NONE if callback list has no callbacks.
  1641.         --> returns CALLBACK_HAS_SOME if some callbacks on list.
  1642.  
  1643.     <name> is a resource keyword of type XmRCallback, eg,
  1644.     :XMN_ACTIVATE_CALLBACK, :XMN_ARM_CALLBACK, :XMN_DISARM_CALLBACK, etc.
  1645.  
  1646. *** XtAddEventHandler(), XtAddRawEventHandler():
  1647.  
  1648.     (send <widget> :ADD_EVENT_HANDLER [:RAW] [:NONMASKABLE] <event_mask>
  1649.                                       <event_data_bindings_list> <code>)
  1650.     (send <widget> :SET_EVENT_HANDLER [:RAW] [:NONMASKABLE] <event_mask>
  1651.                       <event_data_bindings_list> <code>)
  1652.         --> returns an <EVHANDLEROBJ> which identifies the handler.
  1653.  
  1654.     Optional keyword :RAW indicates that XtAddRawEventHandler() will be
  1655.     invoked so as to not affect the widget's input mask nor for it to
  1656.     select for events. Otherwise XtAddEventHandler() will get called.
  1657.  
  1658.     Optional keyword :NONMASKABLE indicates that the handler should be
  1659.     called for nonmaskable events.
  1660.  
  1661.     <event_mask> is a FIXNUM which is the value of the an event mask.
  1662.     event masks may be combined by doing a bitwise OR via the XLISP
  1663.     'LOGIOR' function. The following event mask constants have been
  1664.     defined: NO_EVENT_MASK, KEY_PRESS_MASK, KEY_RELEASE_MASK,
  1665.     BUTTON_PRESS_MASK, BUTTON_RELEASE_MASK, ENTER_WINDOW_MASK,
  1666.     LEAVE_WINDOW_MASK, POINTER_MOTION_MASK, POINTER_MOTIONHINT_MASK,
  1667.     BUTTON1_MOTION_MASK, BUTTON2_MOTION_MASK, BUTTON3_MOTION_MASK,
  1668.     BUTTON4_MOTION_MASK, BUTTON5_MOTION_MASK, BUTTON_MOTION_MASK,
  1669.     KEYMAP_STATE_MASK, EXPOSURE_MASK,  VISIBILITY_CHANGE_MASK
  1670.     STRUCTURE_NOTIFY_MASK, RESIZE_REDIRECT_MASK, SUBSTRUCTURE_NOTIFY_MASK
  1671.     SUBSTRUCTURE_REDIRECT_MASK, FOCUS_CHANGE_MASK, PROPERTY_CHANGE_MASK
  1672.     COLORMAP_CHANGE_MASK, OWNER_GRAB_BUTTON_MASK.
  1673.  
  1674.     <event_data_bindings_list> is a list of symbols that get
  1675.     bound to data specific to the action that caused the event
  1676.     handler to fire. These symbols get bound to specific values during
  1677.     the execution of the event-handler <code>.
  1678.     Valid symbols are:
  1679.         EVHANDLER_WIDGET -- bound to the WIDGETOBJ of the event
  1680.         EVHANDLER_XEVENT -- bound to the XEvent that fired handler.
  1681.         EVHANDLER_BUTTON -- fixnum -- the button or keycode
  1682.         EVHANDLER_TIME   -- fixnum -- the timestamp.
  1683.  
  1684.     <code> is a list of Lisp-forms to be evaluated when the eventhandler
  1685.     fires. When the eventhandler fires, the lexical environment that
  1686.     existed for the call to :ADD_EVENT_HANDLER will be used for value and
  1687.     functional bindings.
  1688.  
  1689.     The eventhandler may be removed by giving the <EVHANDLEROBJ> to
  1690.     procedure REMOVE_EVENT_HANDLER.
  1691.  
  1692.     Note that the :SET_EVENT_HANDLER variant does exactly the same
  1693.     thing as :ADD_EVENT_HANDLER except that it ensures that only one
  1694.     event handler with the given <event_mask>, :RAW and :NONMASKABLE
  1695.     specifications exist on <widget>. It will remove all other matching
  1696.     event handlers in order to set the current event handler. This
  1697.     function is useful for making interactive changes to an event
  1698.     handler without having to remember to remove the previous
  1699.     handler. Note that :SET_EVENT_HANDLER is slower, so it should 
  1700.     not be used in cases where speed is important.
  1701.  
  1702.     NOTE: the EVHANDLER_TIME and EVHANDLER_BUTTON binding values may
  1703.     return gibberish if the eventhandler returned a event->type that
  1704.     doesn't define those fields. This is currently just a kludge for
  1705.     Motif functions that require the event->button info (popup menus)
  1706.     or event->time info (XmClipboard*). Hopefully I'll come up with
  1707.     something better in the future...
  1708.  
  1709. *** XtRemoveEventHandler() // XtRemoveRawEventHandler()
  1710.  
  1711.     (REMOVE_EVENT_HANDLER <EVHANDEROBJ>)
  1712.         --> returns true.
  1713.  
  1714.     This procedure removes the eventhandler corresponding to the 
  1715.     <EVHANDLEROBJ> returned by method :ADD_EVENT_HANDLER
  1716.  
  1717. *** XtBuildEventMask():
  1718.  
  1719.     (send <widget> :BUILD_EVENT_MASK)
  1720.         --> returns as a FIXNUM the event mask representing the
  1721.     logical OR of all event masks for event handlers registered on
  1722.     <widget>. This includes masks set by XtAddEventHandler(), all event
  1723.     translations & accelerators.
  1724.  
  1725. *** XtOverrideTranslations():
  1726.  
  1727.     (send <widget> :OVERRIDE_TRANSLATIONS <translations>)
  1728.         --> returns <widget>
  1729.  
  1730.     This method destructively merges the new <translations> into
  1731.     <widget>'s existing translations -- event sequences in <translations>
  1732.     that already exist from a previous translation will override.
  1733.  
  1734.     <translations> can be a string, in which case it is compiled into a
  1735.     translation table. Otherwise, we expect a value of type
  1736.     XT_TRANSLATIONS as returned by XT_PARSE_TRANSLATION_TABLE.
  1737.  
  1738. *** XtAugmentTranslations():
  1739.  
  1740.     (send <widget> :AUGMENT_TRANSLATIONS <translations>) 
  1741.         --> returns <widget>.
  1742.  
  1743.     This method nondestructively merges the new <translations> into
  1744.     <widget>'s existing translations -- event sequences in <translations>
  1745.     that already exist a previous translation will be ignored.
  1746.  
  1747.     <translations> can be a string, in which case it is compiled into a
  1748.     translation table. Otherwise, we expect a value of type
  1749.     XT_TRANSLATIONS as returned by XT_PARSE_TRANSLATION_TABLE.
  1750.  
  1751. *** XtUninstallTranslations():
  1752.  
  1753.     (send <widget> :UNINSTALL_TRANSLATIONS)
  1754.         -->  returns <widget>
  1755.  
  1756.     This method removes all translations from <widget>.
  1757.  
  1758. *** XtInstallAccelerators():
  1759.  
  1760.     (send <destination> :INSTALL_ACCELERATORS <source>)
  1761.         -->  returns <destination>
  1762.  
  1763.     This method installs the accelerators from widget <source> onto
  1764.     widget <destination> by augmenting the destination translations with
  1765.     the source accelerators.
  1766.     Both <source> and <destination> are WIDGETOBJs.
  1767.  
  1768. *** XtInstallAllAccelerators():
  1769.  
  1770.     (send <destination> :INSTALL_ALL_ACCELERATORS <source>)
  1771.         -->  returns <destination>
  1772.  
  1773.     This method installs the accelerators from widget <source> and all
  1774.     it's children onto widget <destination> by augmenting the destination
  1775.     translations with the source accelerators.
  1776.     Both <source> and <destination> are WIDGETOBJs.
  1777.  
  1778. *** XtDestroyWidget():
  1779.  
  1780.     (send <widget> :DESTROY)
  1781.         --> returns NIL.
  1782.  
  1783.     After calling this routine, the WIDGETOBJ <widget> may be garbage
  1784.     collected, along with all other resources the widget references, such
  1785.     as PIXMAPs CALLBACKOBJs, and EVHANDLEROBJs. Furthermore, this will
  1786.     destroy all children of the destroyed widget and allow their storage
  1787.     to be garbage collected as well.
  1788.  
  1789. *** XtManageChild():
  1790.  
  1791.     (send <widget> :MANAGE)
  1792.         --> returns <widget>
  1793.  
  1794.     This method will add <widget> to it's parent-widget's managed list,
  1795.     which means it will become visible (if mapped) and will take up space
  1796.     within the managing widget.
  1797.  
  1798. *** XtUnmanageChild():
  1799.  
  1800.     (send <widget> :UNMANAGE)
  1801.         --> returns <widget>
  1802.  
  1803.     This method will remove <widget> from its parent's managed list,
  1804.     which means it will no longer be visible or take up space.
  1805.  
  1806. *** XtAddGrab():
  1807.  
  1808.     (send <widget> :ADD_GRAB <exclusive_p> <spring_loaded_p>)
  1809.         -->  returns <widget>
  1810.  
  1811.     This method appends <widget> to the modal cascade -- redirects user
  1812.     input to this widget. <exclusive_p> and <spring_loaded_p> are
  1813.     booleans.
  1814.  
  1815. *** XtRemoveGrab():
  1816.  
  1817.     (send <widget> :REMOVE_GRAB)
  1818.         -->  returns <widget>
  1819.  
  1820.     Removes the redirection of user input to <widget> done via :ADD_GRAB
  1821.  
  1822. *** XtIsCompositeObject() [MOTIF_1.0] // XtIsComposite() [MOTIF_1.1]:
  1823.  
  1824.     (send <widget> :IS_COMPOSITE)
  1825.         --> returns T if <widget> is a composite widget, else NIL.
  1826.  
  1827. *** XtIsConstraint():
  1828.  
  1829.     (send <widget> :IS_CONSTRAINT)
  1830.         --> returns T if <widget> is a constraint widget, else NIL.
  1831.  
  1832. *** XtIsShell():
  1833.  
  1834.     (send <widget> :IS_SHELL)
  1835.         --> returns T if <widget> is a shell widget, else NIL.
  1836.  
  1837. *** XtSetSensitive():
  1838.  
  1839.     (send <widget> :SET_SENSITIVE <sensitive_p>)
  1840.         --> returns <widget>.
  1841.  
  1842.     If <sensitive_p> is NIL, then the widget will not respond to user
  1843.     input.
  1844.  
  1845. *** XtSetMappedWhenManaged():
  1846.  
  1847.     (send <widget> :SET_MAPPED_WHEN_MANAGED <mapped_p>)
  1848.         --> returns <widget>.
  1849.  
  1850.     If <mapped_p> is non-NIL, then the widget will be mapped (displayed)
  1851.     when it is managed by it's parent widget.
  1852.  
  1853. *** XtIsManaged():
  1854.  
  1855.     (send <widget> :IS_MANAGED)
  1856.         --> returns T if the widget is managed, else NIL. 
  1857.  
  1858.     See also method :MANAGE and :UNMANAGE
  1859.  
  1860. *** XtIsRealized():
  1861.  
  1862.     (send <widget> :IS_REALIZED) 
  1863.         --> returns T if the widget is realized, else NIL.
  1864.  
  1865.     See also methods :REALIZE and :UNREALIZE
  1866.  
  1867. *** XtIsSensitive():
  1868.  
  1869.     (send <widget> :IS_SENSITIVE)
  1870.         --> returns T if the widget will accept user input, else NIL. 
  1871.  
  1872.     See also method :SET_SENSITIVE.
  1873.  
  1874. *** XtParent():
  1875.  
  1876.     (send <widget> :PARENT)
  1877.         --> returns the given <widget>'s parent widget or NIL 
  1878.             if no parent.
  1879.  
  1880. *** XtWindow() [MOTIF_1.0] // XtWindowOfObject() [MOTIF_1.1]:
  1881.  
  1882.     (send <widget> :WINDOW)
  1883.         --> returns the given <widget>'s window.
  1884.  
  1885. *** XtMapWidget():
  1886.  
  1887.     (send <widget> :MAP)
  1888.         --> returns <widget>.
  1889.  
  1890.     If the widget is realized and managed, this method will make the
  1891.     window appear on the display. Make it disappear with :UNMAP.
  1892.  
  1893. *** XtUnmapWidget():
  1894.  
  1895.     (send <widget> :UNMAP)
  1896.         --> returns <widget>.
  1897.  
  1898.     If the widget is realized and managed, this method will make the
  1899.     window disappear from the display. Make it reappear with :MAP.
  1900.  
  1901. *** XmUpdateDisplay():
  1902.  
  1903.     (send <widget> :UPDATE_DISPLAY)
  1904.         --> returns <widget>.
  1905.  
  1906.     This method is useful for refreshing WINTERP's Xwindows displays
  1907.     while inside a callback. Since the X display won't get refreshed
  1908.     until you hit the XtNextEvent/XtDispatcEvent loop you cannot normally
  1909.     change the display inside a callback. Thus, this function is
  1910.     especially useful for forcing a status message to be seen before a
  1911.     long computation occurs within a callback.
  1912.  
  1913. *** XmAddTabGroup():
  1914.  
  1915.     (send <widget> :ADD_TAB_GROUP)
  1916.         --> returns <widget>
  1917.  
  1918.     This method adds <widget> to the list of tab groups associated with a
  1919.     particular widget hierarchy.
  1920.  
  1921. *** XmRemoveTabGroup():
  1922.  
  1923.     (send <widget> :REMOVE_TAB_GROUP)
  1924.         --> returns <widget>
  1925.  
  1926.     This method removes <widget> from the list of tab groups associated
  1927.     with a particular widget hierarchy.
  1928.  
  1929. *** XmIsPrimitive():
  1930.  
  1931.     (send <widget> :IS_PRIMITIVE)
  1932.         --> returns T if <widget> is a motif primitive widget, 
  1933.             else NIL.
  1934.  
  1935. *** XmIsGadget():
  1936.  
  1937.     (send <widget> :IS_GADGET)
  1938.         --> returns T if <widget> is a motif gadget, else NIL.
  1939.  
  1940. *** XmIsManager():
  1941.  
  1942.     (send <widget> :IS_MANAGER)
  1943.         --> returns T if <widget> is a motif manager widget, else NIL.
  1944.  
  1945. #ifdef MOTIF_1.1
  1946. *** XmProcessTraversal() [Motif 1.1 only]:
  1947.  
  1948.     (send <widget> :PROCESS_TRAVERSAL <direction>)
  1949.         --> "Returns T if the setting succeeded.  Returns NIL if the
  1950.         keyboard focus policy is not :EXPLICIT, if there are no
  1951.         traversable items, or if the call to the routine has invalid
  1952.         parameters."
  1953.     
  1954.     This method "determines which component receives keyboard events
  1955.      when a widget has the focus." (from XmProcessTraversal.3X manual page)
  1956.     
  1957.     <direction> is a keyword symbol, one of the following:
  1958.     :TRAVERSE_CURRENT
  1959.          "Finds the hierarchy and the tab group that contain widget.
  1960.         If this tab group is not the active tab group, makes it the
  1961.         active tab group.  If widget is an item in the active tab
  1962.         group, makes it the active item.  If widget is the active
  1963.         tab group, makes the first traversable item in the tab group
  1964.         the active item."
  1965.     :TRAVERSE_DOWN
  1966.         "Finds the hierarchy that contains widget.  Finds the active
  1967.         item in the active tab group and makes the item below it the
  1968.         active item.  If there is no item below, wraps."
  1969.     :TRAVERSE_HOME
  1970.         "Finds the hierarchy that contains widget.  Finds the active item
  1971.         in the active tab group and makes the first traversable item in
  1972.         the tab group the active item."
  1973.     :TRAVERSE_LEFT
  1974.          "Finds the hierarchy that contains widget.  Finds the active item
  1975.         in the active tab group and makes the item to the left the active
  1976.         item.  If there is no item to the left, wraps."
  1977.     :TRAVERSE_NEXT
  1978.          "Finds the hierarchy that contains widget.  Finds the active item
  1979.          in the active tab group and makes the next item the active item."
  1980.     :TRAVERSE_NEXT_TAB_GROUP
  1981.          "Finds the hierarchy that contains widget.  Finds the active tab
  1982.          group (if any) and makes the next tab group the active tab group
  1983.          in the hierarchy."
  1984.     :TRAVERSE_PREV
  1985.          "Finds the hierarchy that contains widget.  Finds the active item
  1986.          in the active tab group and makes the previous item the active item."
  1987.     :TRAVERSE_PREV_TAB_GROUP
  1988.          "Finds the hierarchy that contains widget.  Finds the active tab
  1989.          group (if any) and makes the previous tab group the active tab
  1990.          group in the hierarchy.
  1991.     :TRAVERSE_RIGHT
  1992.         "Finds the hierarchy that contains widget.  Finds the active item
  1993.         in the active tab group and makes the item to the right the active
  1994.         item.  If there is no item to the right, wraps."
  1995.     :TRAVERSE_UP
  1996.         "Finds the hierarchy that contains widget. Finds the active item
  1997.          in the active tab group and makes the item above it the active item.
  1998.          If there is no item above, wraps."
  1999. #endif /* MOTIF_1.1 */
  2000.  
  2001. #ifdef MOTIF_1.1
  2002. *** XtName() [Motif 1.1 only]:
  2003.  
  2004.     (send <widget> :NAME)
  2005.         --> returns STRING of widget's name. 
  2006.  
  2007.     The name returned is the STRING passed to the optional [<name>]
  2008.     argument during widget creation. If no <name> argument is given
  2009.     at widget creation time, the result of method :NAME will be the
  2010.     empty string "". See method :NEW on WIDGET_CLASS for details.
  2011. #endif /* MOTIF_1.1 */
  2012.  
  2013. #ifdef MOTIF_1.1
  2014. *** XtCallActionProc() [Motif 1.1 only]:
  2015.  
  2016.     (send <widget> :CALL_ACTION_PROC <action> <xevent>
  2017.                [<param0> [<param1> [...] ]])
  2018.         --> Returns <widget>.
  2019.  
  2020.     This method invokes the specified action procedure <action> on <widget>.
  2021.  
  2022.     <action> is a STRING specifying the name of the action procedure
  2023.     defined on the widget. See the manual page on the widget's class
  2024.     to find out the defined names for widget action procedures. Note
  2025.     that the action procedure names are case sensitive. If the action
  2026.     procedure is not found, an XtWarning is generated.
  2027.  
  2028.     <xevent> is an XEVENT object that is passed on to the action procedure.
  2029.     Typically, this would come from the value of the symbol
  2030.     CALLBACK_XEVENT that is bound during execution of a WINTERP callback.
  2031.  
  2032.     [<param0> [<param1> [...] ]] are an optional sequence of STRING
  2033.     values that are passed on to the action procedure. The number
  2034.     of parameters, as well as the contents of the parameters are
  2035.     dependent on the definition of the action procedure. Many action
  2036.     procedures do not take any parameters, in which case, none should
  2037.     be supplied.
  2038.     
  2039.     Note the following caveat from the X Toolkit specification:
  2040.     "It is the responsibility of the caller to ensure that the contents
  2041.     of the <xevent> and [<param0> [<param1> [...] ]] arguments are
  2042.     appropriate for the specified action routine and, if necessary,
  2043.     that the specified widget is realized or sensitive."
  2044.  
  2045.     Example: the following code sets up a callback on pushbutton widget
  2046.     <insertbut_w>. The callback calls method :CALL_ACTION_PROC on the
  2047.     XmText widget <te_w>. The method calls action procedure
  2048.     insert-string() on the XmText widget, which causes insertion of 
  2049.     all the string parameters given to the action proc into the XmText
  2050.     instance at the cursor position.
  2051.     
  2052.         (send insertbut_w :set_callback :xmn_activate_callback
  2053.               '(CALLBACK_XEVENT)
  2054.               '(
  2055.             (send te_w :CALL_ACTION_PROC "insert-string"
  2056.                   CALLBACK_XEVENT
  2057.                   "jimbrowski " "must " "wear " "a " "hat\n")
  2058.                ))
  2059. #endif /* MOTIF_1.1 */
  2060.  
  2061. #ifdef MOTIF_1.1
  2062. *** XtGetValues(XmNchildren/XmNnumChildren) [Motif 1.1 only]:
  2063.  
  2064.     (send <composite_widget> :GET_CHILDREN)
  2065.         --> Returns an array of WIDGETOBJs, the children
  2066.         of <composite_widget>. Returns NIL if no children.
  2067.  
  2068.     This method retrieves the composite-widget resoruces
  2069.     XtNchildren/XmNchildren and XtNnumChildren/XmNnumChildren. 
  2070.     Due to flaws in Motif/Xt design, :GET_VALUES on resource
  2071.     XmNchildren cannot be done in a straightforward fashion.
  2072.     I've worked around that limitation by providing this method.
  2073.     (Note that these resources are read-only, so there's no
  2074.     point in having any :SET_VALUES interface for them either.)
  2075.  
  2076.     This method will signal an error if the WIDGETOBJ receiving the
  2077.     :GET_CHILDREN message is not a subclass of the 'Composite'
  2078.     widgetclass. (Which makes sense, since no other widget classes 
  2079.     have children...)
  2080. #endif /* MOTIF_1.1 */
  2081.  
  2082. ______________________________________________________________________________
  2083.  
  2084. ** <SHELL_WIDGET_CLASS> -- the WINTERP shell widget metaclass
  2085.  
  2086.     <SHELL_WIDGET_CLASS> is a widget (pseudo) metaclass for all shell
  2087.     widgets. A shell widget is an object representing a "top level"
  2088.     window that are managed by a window manager (e.g. mwm, the
  2089.     Motif window manager).
  2090.  
  2091.     <SHELL_WIDGET_CLASS> is a subclass of WIDGET_CLASS, so all methods
  2092.     on that    metaclass also work on this class as well. 
  2093.  
  2094.  
  2095. *** XtAppCreateShell():
  2096.  
  2097.     The following create instances of metaclass <SHELL_WIDGET_CLASS>:
  2098.  
  2099.     (send TOP_LEVEL_SHELL_WIDGET_CLASS :new [<name> [<class-name>]]
  2100.                         [<args>...])
  2101.         --> XtAppCreateShell(...topLevelShellWidgetClass...)
  2102.  
  2103.     (send APPLICATION_SHELL_WIDGET_CLASS :new [<name> [<class-name>]]
  2104.                           [<args>...])
  2105.         --> XtAppCreateShell(...applicationShellWidgetClass...)
  2106.  
  2107.     (send OVERRIDE_SHELL_WIDGET_CLASS :new [<name> [<class-name>]]
  2108.                            [<args>...])
  2109.         --> XtAppCreateShell(...overrideShellWidgetClass...)
  2110.  
  2111.     (send TRANSIENT_SHELL_WIDGET_CLASS :new [<name> [<class-name>]]
  2112.                         [<args>...])
  2113.         --> XtAppCreateShell(...transientShellWidgetClass...)
  2114.  
  2115.     [<name>] is an optional string that can be used to qualify the
  2116.     resources of all the children of the shell widget as well as the
  2117.     shell widget itself. (e.g. if <name>=="foo", then the resources
  2118.     corresponding to the shell are specified as "foo*resource".
  2119.     If [<name>] is omitted, then the shell's name defaults to "".
  2120.     One may use this feature to specify multiple logical applications
  2121.     running under WINTERP -- each "application" has its own application_shell
  2122.     or top_level_shell and the widgets in each "application" have their
  2123.     own resource hierarchy.
  2124.         
  2125.     [<class-name>] is an optional string that can be used to set a different
  2126.     class name for the widget hierarchy under this shell widget. If
  2127.     <class-name> is omitted, the shell's class-name defaults to "Winterp"
  2128.     unless the [-class <classname>] command-line option is given, in which
  2129.     case the shell's classname is <classname>. Note that if you want to
  2130.     set <class-name>, you must also set parameter <name>.
  2131.     (Note: setting a <class-name> does not tell WINTERP to look in an
  2132.     application defaults file named <class-name>; setting the application
  2133.     defaults file used by WINTERP can only be set via the
  2134.     [-class <classname>] command-line parameter.)
  2135.  
  2136.     [<args>...] represents a sequence of resource pairs. For
  2137.     more details on resource pairs, see method :SET_VALUES or :NEW
  2138.     on WIDGET_CLASS (above).
  2139.  
  2140.  
  2141. *** XtRealizeWidget():
  2142.  
  2143.     (send <Shell_Widget_Instance> :REALIZE)
  2144.         ==> returns <Shell_Widget_Instance>
  2145.  
  2146.     This method causes the shell window and it's subwindows to be
  2147.     created and will make the window appear on the screen.
  2148.  
  2149.  
  2150. *** XtUnrealizeWidget():
  2151.  
  2152.     (send <Shell_Widget_Instance> :UNREALIZE)
  2153.         ==> returns <Shell_Widget_Instance>
  2154.  
  2155.     This method destroys the window associated with the shell and
  2156.     all it's subwindows.
  2157.  
  2158.  
  2159. *** XmIsMotifWMRunning():
  2160.  
  2161.     (send <Shell_Widget_Instance> :IS_MOTIF_WM_RUNNING)
  2162.         ==> returns T if the motif window manager (mwm) is running,
  2163.             else NIL.
  2164.  
  2165.  
  2166. ** XtGetValues(XmNargv/XmNargc):
  2167.  
  2168.     (send <Application_Shell_Widget_Instance> :GET_ARGV) or
  2169.     (send <Application_Popup_Shell_Widget_Instance> :GET_ARGV)
  2170.         ==> returns an array of strings.
  2171.     
  2172.     Method :GET_ARGV is valid only for ApplicationShell widgets.
  2173.     It retrieves the resources XmNargv and XmNargc from
  2174.     <Application_Shell_Widget_Instance> and returns an array of strings
  2175.     representing the command line args with    which the program was called.
  2176.  
  2177.     Example: to retrieve the command line arguments with which winterp
  2178.     was invoked, do:
  2179.             (send *TOPLEVEL_WIDGET* :GET_ARGV)
  2180.     Where *TOPLEVEL_WIDGET* is a global symbol bound to the (by default)
  2181.     hidden (unmapped) WINTERP main application shell. (see above for
  2182.     more info on *TOPLEVEL_WIDGET*)
  2183.  
  2184. ** XtSetValues(XmNargv/XmNargc):
  2185.  
  2186.     (send <Application_Shell_Widget_Instance> :SET_ARGV <args>)
  2187.         ==> returns <Application_Shell_Widget_Instance>.
  2188.  
  2189.     Method :SET_ARGV is valid only for ApplicationShell widgets.
  2190.     This sets the XmNargv and XmNargc resources based on the sequence of
  2191.     string arguments <args>. The resources are set on
  2192.     <Application_Shell_Widget_Instance> and this supposedly will allow
  2193.     session managers that the application should start up with the new
  2194.     <args> specified here.
  2195. ______________________________________________________________________________
  2196.  
  2197. ** <POPUP_SHELL_WIDGET_CLASS> -- the WINTERP popup shell widget metaclass
  2198.  
  2199.     <POPUP_SHELL_WIDGET_CLASS> is a (pseudo) metaclass for all popup shells.
  2200.     Popup shells are used for creating dialog boxes, menus, and other
  2201.     interactors that "pop up" from an application window. Like instances of
  2202.     <SHELL_WIDGET_CLASS>, popup shells are "top level" windows that are
  2203.     managed by the window manager.
  2204.  
  2205.     This class is a subclass of <SHELL_WIDGET_CLASS> and
  2206.     WIDGET_CLASS, all methods on those classes also work on this class.
  2207.     
  2208.  
  2209. *** XtCreatePopupShell():
  2210.  
  2211.     The following create instances of metaclass <POPUP_SHELL_WIDGET_CLASS>.
  2212.     Optional argument <name> is a string, the name of the widget.
  2213.     <parent> is a WIDGETOBJ that has the new widget instance as popup
  2214.     child. [<args>...] represents a sequence of resource pairs. For
  2215.     more details on resource pairs, see method :SET_VALUES or :NEW
  2216.     on WIDGET_CLASS.
  2217.  
  2218.     (send TOP_LEVEL_POPUP_SHELL_WIDGET_CLASS :new [<name>] <parent>
  2219.                             [<args>...])
  2220.         --> XtCreatePopupShell(topLevelShellWidgetClass)
  2221.  
  2222.     (send APPLICATION_POPUP_SHELL_WIDGET_CLASS :new [<name>] <parent>
  2223.                             [<args>...])
  2224.         --> XtCreatePopupShell(applicationShellWidgetClass)
  2225.  
  2226.     (send OVERRIDE_POPUP_SHELL_WIDGET_CLASS :new [<name>] <parent>
  2227.                              [<args>...])
  2228.         --> XtCreatePopupShell(overrideShellWidgetClass)
  2229.  
  2230.     (send TRANSIENT_POPUP_SHELL_WIDGET_CLASS :new [<name>] <parent>
  2231.                               [<args>...])
  2232.         --> XtCreatePopupShell(transientShellWidgetClass)
  2233.  
  2234.     (send XM_DIALOG_POPUP_SHELL_WIDGET_CLASS :new [<name>] <parent>
  2235.                               [<args>...])
  2236.         --> XmCreateDialogShell()
  2237.         --> XtCreatePopupShell(xmDialogShellWidgetClass)
  2238.  
  2239.     (send XM_MENU_POPUP_SHELL_WIDGET_CLASS :new [<name>] <parent>
  2240.                             [<args>...])
  2241.         --> XmCreateMenuShell()
  2242.         --> XtCreatePopupShell(xmMenuShellWidgetClass)
  2243.  
  2244.  
  2245. *** XtPopup():
  2246.  
  2247.     (send <Popup_Shell_Widget_Instance> :POPUP <grabkind>)
  2248.         ==> returns <Popup_Shell_Widget_Instance>
  2249.  
  2250.     This method pops up the shell, keyword symbol <grabkind> determines
  2251.     the kind of grab used: :grab_none, :grab_nonexclusive, :grab_exclusive.
  2252.  
  2253.  
  2254. *** XtPopDown():
  2255.  
  2256.     (send <Popup_Shell_Widget_Instance> :POPDOWN)
  2257.         ==> returns  <Popup_Shell_Widget_Instance>
  2258.  
  2259.     This method pops down the shell, making it invisible and removing
  2260.     the grab setup by :popup.
  2261.  
  2262.  
  2263. ** XtGetValues(XmNargv/XmNargc):
  2264.  
  2265.     (send <Application_Popup_Shell_Widget_Instance> :GET_ARGV)
  2266.         ==> returns an array of strings.
  2267.     
  2268.     Method :GET_ARGV is valid only for ApplicationShell widgets.
  2269.     It retrieves the resources XmNargv and XmNargc from
  2270.     <Application_Shell_Widget_Instance> and returns an array of strings
  2271.     representing the command line args with    which the program was called.
  2272.  
  2273.  
  2274. ** XtSetValues(XmNargv/XmNargc):
  2275.  
  2276.     (send <Application_Popup_Shell_Widget_Instance> :SET_ARGV <args>)
  2277.         ==> returns <Application_Popup_Shell_Widget_Instance>.
  2278.  
  2279.     Method :SET_ARGV is valid only for ApplicationShell widgets.
  2280.     This sets the XmNargv and XmNargc resources based on the sequence of
  2281.     string arguments <args>. The resources are set on
  2282.     <Application_Popup_Shell_Widget_Instance> and this supposedly will allow
  2283.     session managers that the application should start up with the new
  2284.     <args> specified here.
  2285. ______________________________________________________________________________
  2286.  
  2287. ** XM_ARROW_BUTTON_WIDGET_CLASS / XM_ARROW_BUTTON_GADGET_CLASS
  2288.  
  2289. *** equivalent Xt 'WidgetClass':
  2290.  
  2291.     xmArrowButtonWidgetClass
  2292.     xmArrowButtonGadgetClass
  2293.  
  2294. *** equivalent creation convenience function:
  2295.  
  2296.     (send XM_ARROW_BUTTON_WIDGET_CLASS :new [:managed/:unmanaged] ...) 
  2297.         --> XmCreateArrowButton()
  2298.  
  2299.     (send XM_ARROW_BUTTON_GADGET_CLASS :new [:managed/:unmanaged] ...)
  2300.         --> XmCreateArrowButtonGadget()
  2301.  
  2302.  
  2303. *** XtAddCallback():
  2304.  
  2305.    #ifdef MOTIF_1.0
  2306.     In Motif 1.0, :ADD_CALLBACK/:SET_CALLBACK on arrow buttons will
  2307.     use the :ADD_CALLBACK/:SET_CALLBACK methods defined on
  2308.     <WIDGET_CLASS>, the XmAnyCallbackStruct fields defined on those
  2309.     methods will be valid.
  2310.    #endif /* MOTIF_1.0 */
  2311.  
  2312.    #ifdef MOTIF_1.1
  2313.     (send <arrow-button> :ADD_CALLBACK ...)
  2314.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2315.     (send <arrow-button> :SET_CALLBACK ...)
  2316.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2317.  
  2318.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  2319.     methods on WIDGET_CLASS except that these methods understand
  2320.     how to get call_data values from the XmArrowButtonCallbackStruct
  2321.         typedef struct
  2322.         {
  2323.             int     reason;
  2324.             XEvent  *event;
  2325.             int        click_count;
  2326.         } XmArrowButtonCallbackStruct;
  2327.  
  2328.     Specifying one or more of the following symbols in the callback
  2329.     bindings list will bind that symbol's value in the lexical
  2330.     environment of the callback:
  2331.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  2332.         CALLBACK_REASON -- the reason symbol for the callback
  2333.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  2334.         CALLBACK_CLICK_COUNT -- a FIXNUM representing the number of
  2335.                     clicks upon the button. The click count
  2336.                     will only be > 1 when resource 
  2337.                     :XMN_MULTI_CLICK == :MULTICLICK_KEEP
  2338.    #endif /* MOTIF_1.1 */
  2339. ______________________________________________________________________________
  2340.  
  2341. ** XM_BULLETIN_BOARD_WIDGET_CLASS
  2342.  
  2343. *** equivalent Xt 'WidgetClass':
  2344.  
  2345.     xmBulletinBoardWidgetClass
  2346.  
  2347. *** equivalent creation convenience function:
  2348.  
  2349.     (send XM_BULLETIN_BOARD_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  2350.         --> XmCreateBulletinBoard()
  2351.  
  2352.     (send XM_BULLETIN_BOARD_WIDGET_CLASS :new [:managed/:unmanaged]
  2353.                          :DIALOG ...)
  2354.         --> XmCreateBulletinBoardDialog()
  2355. ______________________________________________________________________________
  2356.  
  2357. ** XM_CASCADE_BUTTON_WIDGET_CLASS / XM_CASCADE_BUTTON_GADGET_CLASS
  2358.  
  2359. *** equivalent Xt 'WidgetClass':
  2360.  
  2361.     xmCascadeButtonWidgetClass
  2362.     xmCascadeButtonGadgetClass
  2363.  
  2364. *** equivalent creation convenience function:
  2365.  
  2366.     (send XM_CASCADE_BUTTON_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  2367.         --> XmCreateCascadeButton()
  2368.  
  2369.     (send XM_CASCADE_BUTTON_GADGET_CLASS :new [:managed/:unmanaged] ...)
  2370.         --> XmCreateCascadeButtonGadget()
  2371.  
  2372. *** XmCascadeButtonHighlight():
  2373.  
  2374.     (send <cascadebutton> :HIGHLIGHT <highlight_p>)
  2375.         --> returns <cascadebutton>
  2376.  
  2377.     This method draws the shadow highlight around the cascadebutton if
  2378.     <highlight_p> is true, and unhighlights if <highlight_p> is NIL.
  2379.  
  2380. #ifdef MOTIF_1.1
  2381. *** XtGetValues(...XmNsubMenuId...): [Motif 1.1 only -- Motif bug work-around]
  2382.  
  2383.     (send <cascadebutton> :GET_SUB_MENU_WIDGET)
  2384.         ==> this method returns the WIDGETOBJ corresponding to the
  2385.         the widget returned by resource XmNsubMenuId.
  2386.  
  2387.     Why use this instead of XmNsubMenuId?? Because due to some weird
  2388.     Motif 1.1 bug, (probably in motif) doing
  2389.     (send <cascadebutton> :get_values :XMN_SUB_MENU_ID nil) returns
  2390.     <cascadebutton>. ???
  2391. #endif /* MOTIF_1.1 */
  2392.  
  2393. ______________________________________________________________________________
  2394.  
  2395. ** XM_COMMAND_WIDGET_CLASS
  2396.  
  2397. *** equivalent Xt 'WidgetClass':
  2398.  
  2399.     xmCommandWidgetClass
  2400.  
  2401. *** equivalent creation convenience function:
  2402.  
  2403.     (send XM_COMMAND_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  2404.         --> XmCreateCommand()
  2405.  
  2406. *** XtAddCallback():
  2407.  
  2408.     (send <commandwidget> :ADD_CALLBACK ...)
  2409.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2410.     (send <commandwidget> :SET_CALLBACK ...)
  2411.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2412.  
  2413.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  2414.     methods on WIDGET_CLASS except that these methods understand
  2415.     how to get call_data values from the XmCommandCallbackStruct:
  2416.         typedef struct
  2417.         {
  2418.             int reason;
  2419.             XEvent    *event;
  2420.             XmString    value;
  2421.             int    length;
  2422.         } XmCommandCallbackStruct;
  2423.  
  2424.     Specifying one or more of the following symbols in the callback
  2425.     bindings list will bind that symbol's value in the lexical
  2426.     environment of the callback:
  2427.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  2428.         CALLBACK_REASON -- the reason symbol for the callback
  2429.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  2430.         CALLBACK_VALUE -- the XmString of the command.
  2431.         CALLBACK_LENGTH -- the length of XmString in CALLBACK_VALUE
  2432.  
  2433. *** XmCommandGetChild():
  2434.  
  2435.     (send <commandwidget> :GET_CHILD <symbol>)
  2436.         --> returns a WIDGETOBJ corresponding to <symbol>
  2437.  
  2438.     <symbol> can be :DIALOG_COMMAND_TEXT,
  2439.                     :DIALOG_HISTORY_LIST, or
  2440.                     :DIALOG_PROMPT_LABEL
  2441.  
  2442. *** XmCommandAppendValue():
  2443.  
  2444.     (send <commandwidget> :APPEND_VALUE <value>)
  2445.         --> returns <value>.
  2446.  
  2447.     This method appends the string or XmString <value> to the string in
  2448.     the command area widget. If a normal string is given, it will be
  2449.     converted to an XmString and returned as the method's result.
  2450.  
  2451. *** XmCommandSetValue():
  2452.  
  2453.     (send <commandwidget> :SET_VALUE <value>)
  2454.         --> returns <value>
  2455.  
  2456.     This method sets the text in the widget's command area to the
  2457.     string or XmString <value>. If a normal string is given, it will be
  2458.     converted to an XmString and returned as the method's result.
  2459.  
  2460. *** XmCommandError():
  2461.     (send <commandwidget> :ERROR <error>)
  2462.         --> returns <error>.
  2463.  
  2464.     This method temporarily displays the string or XmString <error> in
  2465.     the history area of the command widget, the display is cleared upon
  2466.     entry of the next command. If a normal string is given, it will be
  2467.     converted to an XmString and returned as the method's result.
  2468.  
  2469. *** XtGetValues(XmNhistoryItems/XmNhistoryItemCount):
  2470.  
  2471.     (send <commandwidget> :GET_HISTORY_ITEMS)]
  2472.         --> returns an array of XM_STRING, each representing
  2473.         an item in the command widget's selection box.
  2474.  
  2475.     This method allows retrieval of command widget resource XmNhistoryItems.
  2476.     Due to flaws in Motif/Xt design, :GET_VALUES on resource
  2477.     :XMN_HISTORY_ITEMS cannot be done in a straightforward fashion.
  2478.     I've worked around that limitation by providing this method.
  2479.  
  2480. ______________________________________________________________________________
  2481.  
  2482. ** XM_DRAWING_AREA_WIDGET_CLASS
  2483.  
  2484. *** equivalent Xt 'WidgetClass':
  2485.  
  2486.     xmDrawingAreaWidgetClass
  2487.  
  2488. *** equivalent creation convenience function:
  2489.  
  2490.     (send XM_DRAWING_AREA_WIDGET_CLASS :new [:managed/:unmanaged] ..)
  2491.         --> XmCreateDrawingArea()
  2492.  
  2493. *** XtAddCallback():
  2494.  
  2495.     (send <drawingareawidget> :ADD_CALLBACK ...)
  2496.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2497.     (send <drawingareawidget> :SET_CALLBACK ...)
  2498.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2499.  
  2500.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  2501.     methods on WIDGET_CLASS except that this method knows
  2502.     how to get call_data values from the XmDrawingAreaCallbackStruct:
  2503.         typedef struct
  2504.         {
  2505.             int     reason;
  2506.             XEvent  *event;
  2507.             Window  window;
  2508.         } XmDrawingAreaCallbackStruct;
  2509.  
  2510.     Specifying one or more of the following symbols in the callback
  2511.     bindings list will bind that symbol's value in the lexical
  2512.     environment of the callback:
  2513.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  2514.         CALLBACK_REASON -- the reason symbol for the callback
  2515.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  2516.         CALLBACK_WINDOW -- the Window of the callback
  2517.  
  2518. ______________________________________________________________________________
  2519.  
  2520. ** XM_DRAWN_BUTTON_WIDGET_CLASS
  2521.  
  2522. *** equivalent Xt 'WidgetClass':
  2523.  
  2524.     xmDrawnButtonWidgetClass
  2525.  
  2526. *** equivalent creation convenience function:
  2527.  
  2528.     (send XM_DRAWN_BUTTON_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  2529.         --> XmCreateDrawnButton()
  2530.  
  2531. *** XtAddCallback():
  2532.  
  2533.     (send <drawnbuttonwidget> :ADD_CALLBACK ...)
  2534.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2535.     (send <drawnbuttonwidget> :SET_CALLBACK ...)
  2536.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2537.  
  2538.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  2539.     methods on WIDGET_CLASS except that these methods understand
  2540.     how to get call_data values from the XmDrawnButtonCallbackStruct: 
  2541.         typedef struct
  2542.         {
  2543.             int     reason;
  2544.             XEvent  *event;
  2545.             Window  window;
  2546.         #ifdef MOTIF_1.1
  2547.             int        click_count;  /* FIELD EXISTS ONLY IN MOTIF 1.1 */
  2548.         #endif MOTIF_1.1
  2549.         } XmDrawnButtonCallbackStruct;
  2550.  
  2551.     Specifying one or more of the following symbols in the callback
  2552.     bindings list will bind that symbol's value in the lexical
  2553.     environment of the callback:
  2554.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  2555.         CALLBACK_REASON -- the reason symbol for the callback
  2556.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  2557.         CALLBACK_WINDOW -- the Window of the callback
  2558.        #ifdef MOTIF_1.1
  2559.         CALLBACK_CLICK_COUNT -- a FIXNUM representing the number of
  2560.                     clicks upon the button. The click count
  2561.                     will only be > 1 when resource 
  2562.                     :XMN_MULTI_CLICK == :MULTICLICK_KEEP
  2563.        #endif /* MOTIF_1.1 */
  2564.  
  2565. ______________________________________________________________________________
  2566.  
  2567. ** XM_FILE_SELECTION_BOX_WIDGET_CLASS
  2568.  
  2569. *** equivalent Xt 'WidgetClass':
  2570.  
  2571.     xmFileSelectionBoxWidgetClass
  2572.  
  2573. *** equivalent creation convenience function:
  2574.  
  2575.     (send XM_FILE_SELECTION_BOX_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  2576.         --> XmCreateFileSelectionBox()
  2577.  
  2578.     (send XM_FILE_SELECTION_BOX_WIDGET_CLASS :new [:managed/:unmanaged] :dialog ...)
  2579.         --> XmCreateFileSelectionDialog()
  2580.  
  2581. *** XtAddCallback():
  2582.  
  2583.     (send <fileselboxwidget> :ADD_CALLBACK ...)
  2584.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2585.     (send <fileselboxwidget> :SET_CALLBACK ...)
  2586.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2587.  
  2588.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  2589.     methods on WIDGET_CLASS except that these methods understand
  2590.     how to get call_data values from the XmFileSelectionBoxCallbackStruct: 
  2591.         typedef struct
  2592.         {
  2593.             int reason;
  2594.             XEvent    *event;
  2595.             XmString    value;
  2596.             int        length;
  2597.             XmString    mask;
  2598.             int        mask_length;
  2599.         #ifdef MOTIF_1.1
  2600.             XmString    dir;        /* FIELD EXISTS ONLY IN MOTIF 1.1 */
  2601.             int        dir_length; /* FIELD EXISTS ONLY IN MOTIF 1.1 */
  2602.             XmString    pattern;    /* FIELD EXISTS ONLY IN MOTIF 1.1 */
  2603.             int        pattern_length; /* FIELD EXISTS ONLY IN MOTIF 1.1 */
  2604.         #endif /* MOTIF_1.1 */
  2605.         } XmFileSelectionBoxCallbackStruct;
  2606.  
  2607.     Specifying one or more of the following symbols in the callback
  2608.     bindings list will bind that symbol's value in the lexical
  2609.     environment of the callback:
  2610.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  2611.         CALLBACK_REASON -- the reason symbol for the callback
  2612.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  2613.         CALLBACK_VALUE  -- the XmString corresponding to the current
  2614.                    value of resource :XMN_DIR_SPEC
  2615.         CALLBACK_LENGTH -- the length of XmString in CALLBACK_VALUE    
  2616.         CALLBACK_MASK   -- the XmString corresponding to the current
  2617.                    value of resource :XMN_DIR_MASK
  2618.         CALLBACK_MASK_LENGTH -- the length of XmString in CALLBACK_MASK
  2619.        #ifdef MOTIF_1.1
  2620.         CALLBACK_DIR        -- the current base directory (XmString)
  2621.         CALLBACK_DIR_LENGTH    -- length of XmString in CALLBACK_DIR
  2622.         CALLBACK_PATTERN    -- the search pattern (XmString)
  2623.         CALLBACK_PATTERN_LENGTH -- length of XmString in CALLBACK_PATTERN
  2624.        #endif /* MOTIF_1.1 */
  2625.  
  2626. *** XmFileSelectionBoxGetChild():
  2627.  
  2628.     (send <fileselboxwidget> :GET_CHILD <child_sym>)
  2629.         --> returns a WIDGETOBJ, the child of <fileselboxwidget>
  2630.         corresponding to one of the following keyword symbols:
  2631.         #ifdef MOTIF_1.1
  2632.              :DIALOG_DIR_LIST
  2633.              :DIALOG_DIR_LIST_LABEL
  2634.         #endif /* MOTIF_1.1 */
  2635.              :DIALOG_WORK_AREA
  2636.              :DIALOG_SEPARATOR
  2637.              :DIALOG_APPLY_BUTTON
  2638.              :DIALOG_CANCEL_BUTTON
  2639.              :DIALOG_DEFAULT_BUTTON
  2640.              :DIALOG_FILTER_LABEL
  2641.              :DIALOG_FILTER_TEXT
  2642.              :DIALOG_HELP_BUTTON
  2643.              :DIALOG_LIST
  2644.              :DIALOG_LIST_LABEL
  2645.              :DIALOG_OK_BUTTON
  2646.              :DIALOG_SELECTION_LABEL
  2647.              :DIALOG_TEXT
  2648.  
  2649. *** XmFileSelectionDoSearch():
  2650.  
  2651.     (send <fileselboxwidget> :DO_SEARCH [<dirmask>])
  2652.         --> returns <dirmask>
  2653.  
  2654.     This method initiates a directory search. The search will be
  2655.     according to the string or XmString <dirmask>. If <dirmask> is NIL,
  2656.     or not supplied, then the search will use the current directory
  2657.     mask. This method returns <dirmask> as an XmString or NIL.
  2658.  
  2659. #ifdef MOTIF_1.1
  2660. *** XtGetValues(XmNdirListItems/XmNdirListItemCount) [MOTIF_1.1 only]:
  2661.  
  2662.     (send <fileselboxwidget> :GET_DIR_LIST_ITEMS)
  2663.         --> returns an array of XM_STRING, each representing
  2664.         an item in the file-selection box's directory list widget.
  2665.  
  2666.     This method allows retrieval of list widget resource XmNdirListItems.
  2667.     Due to flaws in Motif/Xt design, :GET_VALUES on resource
  2668.     :XMN_DIR_LIST_ITEMS cannot be done in a straightforward fashion.
  2669.     I've worked around that limitation by providing this method.
  2670. #endif /* MOTIF_1.1 */
  2671.  
  2672. #ifdef MOTIF_1.1
  2673. *** XtGetValues(XmNfileListItems/XmNfileListItemCount) [MOTIF_1.1 only]:
  2674.  
  2675.     (send <fileselboxwidget> :GET_FILE_LIST_ITEMS)
  2676.         --> returns an array of XM_STRING, each representing
  2677.         an item in the file-selection box's file list widget.
  2678.  
  2679.     This method allows retrieval of list widget resource XmNfileListItems.
  2680.     Due to flaws in Motif/Xt design, :GET_VALUES on resource
  2681.     :XMN_FILE_LIST_ITEMS cannot be done in a straightforward fashion.
  2682.     I've worked around that limitation by providing this method.
  2683. #endif /* MOTIF_1.1 */
  2684.  
  2685. ______________________________________________________________________________
  2686.  
  2687. ** XM_FORM_WIDGET_CLASS
  2688.  
  2689. *** equivalent Xt 'WidgetClass':
  2690.  
  2691.     xmFormWidgetClass
  2692.  
  2693. *** equivalent creation convenience function:
  2694.  
  2695.     (send XM_FORM_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  2696.         --> XmCreateForm()
  2697.  
  2698.     (send XM_FORM_WIDGET_CLASS :new [:managed/:unmanaged] :dialog ...)
  2699.         --> XmCreateFormDialog()
  2700.  
  2701. ______________________________________________________________________________
  2702.  
  2703. ** XM_FRAME_WIDGET_CLASS
  2704.  
  2705. *** equivalent Xt 'WidgetClass':
  2706.  
  2707.     xmFrameWidgetClass
  2708.  
  2709. *** equivalent creation convenience function:
  2710.  
  2711.     (send XM_FRAME_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  2712.         --> XmCreateFrame()
  2713. ______________________________________________________________________________
  2714.  
  2715. ** XM_LABEL_WIDGET_CLASS / XM_LABEL_GADGET_CLASS
  2716.  
  2717. *** equivalent Xt 'WidgetClass':
  2718.  
  2719.     xmLabelWidgetClass
  2720.     xmLabelGadgetClass
  2721.  
  2722. *** equivalent creation convenience function:
  2723.  
  2724.     (send XM_LABEL_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  2725.         --> XmCreateLabel()
  2726.  
  2727.     (send XM_LABEL_GADGET_CLASS :new [:managed/:unmanaged] ...)
  2728.         --> XmCreateLabelGadget()
  2729. ______________________________________________________________________________
  2730.  
  2731. ** XM_LIST_WIDGET_CLASS
  2732.  
  2733. *** equivalent Xt 'WidgetClass':
  2734.  
  2735.     xmListWidgetClass
  2736.  
  2737. *** equivalent creation convenience function:
  2738.  
  2739.     (send XM_LIST_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  2740.         --> XmCreateList()
  2741.  
  2742.     (send XM_LIST_WIDGET_CLASS :new [:managed/:unmanaged] :scrolled ...)
  2743.         --> XmCreateScrolledList()
  2744.  
  2745.     Note -- the :scrolled list widget created by XmCreateScrolledList()
  2746.     is anomalous, since it returns a list widget whose parent is of
  2747.     class xmScrolledWindowWidgetClass. Unless special kludgery was
  2748.     added since the last time I looked at the source, this may result
  2749.     in problems in using this widget with managers and constraint
  2750.     manager as <parent>. If that happens, do (send <list_w> :parent)
  2751.     to retrieve the appropriate widget to be managed.
  2752.  
  2753. *** XtAddCallback():
  2754.  
  2755.     (send <listwidget> :ADD_CALLBACK ...)
  2756.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2757.     (send <listwidget> :SET_CALLBACK ...)
  2758.         --> returns: <callback_id_object> of type CALLBACKOBJ
  2759.  
  2760.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  2761.     methods on WIDGET_CLASS except that these methods understand
  2762.     how to get call_data values from the XmListCallbackStruct:
  2763.         typedef struct
  2764.         {
  2765.            int     reason;
  2766.            XEvent    *event;
  2767.            XmString  item;
  2768.            int       item_length;
  2769.            int       item_position;
  2770.            XmString  *selected_items;
  2771.            int       selected_item_count;
  2772.         #ifdef MOTIF_1.1
  2773.            int       *selected_item_positions;/* EXISTS ONLY IN 1.1 */
  2774.         #endif /* MOTIF_1.1 */    
  2775.            int       selection_type;
  2776.         } XmListCallbackStruct;
  2777.  
  2778.     Specifying one or more of the following symbols in the callback
  2779.     bindings list will bind that symbol's value in the lexical
  2780.     environment of the callback:
  2781.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  2782.         CALLBACK_REASON -- the reason symbol for the callback
  2783.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  2784.         CALLBACK_ITEM    -- the selected list item, an XmString.
  2785.         CALLBACK_ITEM_LENGTH -- the length of XmString in CALLBACK_ITEM
  2786.         CALLBACK_ITEM_POSITION -- the position of the selected item
  2787.                           in the list, a nonnegative FIXNUM.
  2788.         CALLBACK_SELECTED_ITEMS -- an ARRAY of XmStrings corresponding
  2789.                        to the selected items in the list.
  2790.        #ifdef MOTIF_1.1
  2791.         CALLBACK_SELECTED_ITEM_POSITIONS --
  2792.                 -- an ARRAY of FIXNUMS reprenseting the
  2793.                    positions of items in the list widget.
  2794.        #endif /* MOTIF_1.1 */
  2795.         CALLBACK_SELECTED_ITEM_COUNT -- a FIXNUM, the number of items
  2796.                         in CALLBACK_SELECTED_ITEMS and
  2797.                         CALLBACK_SELECTED_ITEM_POSITIONS
  2798.         CALLBACK_SELECTION_TYPE -- a SYMBOL, either INITIAL, ADDITION,
  2799.                        or MODIFICATION corresponding to
  2800.                        the Motif constants XmINITIAL,
  2801.                        XmADDITION, or XmMODIFICATION.
  2802.  
  2803.     Note that the callback bindings that are valid depend on the
  2804.     kind of callback you have set up:
  2805.  
  2806.     For :XMN_SINGLE_SELECTION_CALLBACK, :XMN_BROWSE_SELECTION_CALLBACK
  2807.     and :XMN_DEFAULT_ACTION_CALLBACK, the valid symbols are:
  2808.         CALLBACK_WIDGET, CALLBACK_REASON, CALLBACK_XEVENT,
  2809.         CALLBACK_ITEM, CALLBACK_ITEM_LENGTH, CALLBACK_ITEM_POSITION.
  2810.  
  2811.     For :XMN_MULTIPLE_SELECTION_CALLBACK, the valid symbols are:
  2812.         CALLBACK_WIDGET, CALLBACK_REASON, CALLBACK_XEVENT, 
  2813.         CALLBACK_ITEM, CALLBACK_ITEM_LENGTH, CALLBACK_ITEM_POSITION,
  2814.         CALLBACK_SELECTED_ITEMS, CALLBACK_SELECTED_ITEM_POSITIONS, 
  2815.         CALLBACK_SELECTED_ITEM_COUNT.
  2816.  
  2817.     For :XMN_EXTENDED_SELECTION_CALLBACK, the valid symbols are:
  2818.         callback_widget, callback_reason, callback_xevent, 
  2819.         callback_item, callback_item_length, callback_item_position,
  2820.         callback_selected_items, callback_selected_item_count,
  2821.         callback_selection_type, callback_selected_item_positions
  2822.  
  2823. *** XmListAddItem()
  2824.  
  2825.     (send <listwidget> :ADD_ITEM <item> <position>)
  2826.          --> returns <item> as an XmString.
  2827.  
  2828.     This method adds <item> to <listwidget> at the given position.
  2829.  
  2830.     <item> is a string or XmString. If <item> is given as a string, it
  2831.          is converted to an XmString and that XmString is returned.
  2832.  
  2833.     <position> is an positive fixnum. Specifying 0 will add the item to
  2834.     the end    of the list, 1 makes it the first item, 2 the second, etc.
  2835.  
  2836. *** XmListAddItemUnselected():
  2837.  
  2838.     (send <listwidget> :ADD_ITEM_UNSELECTED <item> <position>)
  2839.          ==> returns <item> as an XmString.
  2840.  
  2841.     This method adds <item> to <listwidget> at the given position and
  2842.     ensures that <item> is not selected.
  2843.  
  2844.     <item> is a string or XmString. If <item> is given as a string, it
  2845.     is converted to an XmString and that XmString is returned by the
  2846.     method.
  2847.  
  2848.     <position> is an positive fixnum. Specifying 0 will add the item to
  2849.     the end    of the list, 1 makes it the first item, 2 the second, etc.
  2850.  
  2851. #ifdef MOTIF_1.1
  2852. *** XmListAddItems() [Motif 1.1 only]
  2853.  
  2854.     (send <listwidget> :ADD_ITEMS <item-seq> <position>)
  2855.         ==> returns <listwidget>
  2856.  
  2857.     This method adds the specified items to the list at the
  2858.     given position. When the items are inserted into the list, they are
  2859.     compared with the current list of selected items. If the any of the new
  2860.     items matches an item on the selected list, it appears selected.
  2861.  
  2862.     <item-seq> is a list or array of strings or XmStrings. Note that if 
  2863.     strings are given, they will automatically be converted to XmStrings
  2864.     before being passed to <listwidget>.
  2865.  
  2866.     <position> is an positive fixnum. Specifying 0 will add the item to
  2867.     the end    of the list, 1 makes it the first item, 2 the second, etc.
  2868. #endif /* MOTIF_1.1 */
  2869.  
  2870. #ifdef MOTIF_1.1
  2871. *** XmListDeleteAllItems() [Motif 1.1 only]
  2872.  
  2873.     (send <listwidget> :DELETE_ALL_ITEMS)
  2874.         ==> returns <listwidget>.
  2875.  
  2876.     XmListDeleteAllItems deletes all items from <listwidget>.
  2877. #endif /* MOTIF_1.1 */
  2878.  
  2879. *** XmListDeleteItem():
  2880.  
  2881.     (send <listwidget> :DELETE_ITEM <item>)
  2882.          ==> returns <item> as an XmString
  2883.  
  2884.     This method deletes the specified <item> from <listwidget>, giving
  2885.     an XtWarning if <item> doesn't exist.
  2886.  
  2887.     <item> is a string or XmString. If <item> is given as a string, it
  2888.     is converted to an XmString and that XmString is returned by the
  2889.     method.
  2890.  
  2891. #ifdef MOTIF_1.1
  2892. *** XmListDeleteItems() [Motif 1.1 only]
  2893.  
  2894.     (send <listwidget> :DELETE_ITEMS <item-seq>)
  2895.         ==> returns <listwidget>
  2896.  
  2897.     <item-seq> is a list or array of strings or XmStrings. Note that if 
  2898.     strings are given, they will automatically be converted to XmStrings
  2899.     before being passed to <listwidget>.
  2900.  
  2901.     This method deletes the specified <item-seq> from <listwidget>, giving
  2902.     an XtWarning if <item> doesn't exist.
  2903. #endif /* MOTIF_1.1 */
  2904.  
  2905. #ifdef MOTIF_1.1
  2906. *** XmListDeleteItemsPos() [Motif 1.1 only]
  2907.  
  2908.     (send <listwidget> :DELETE_ITEMS_POS <position> <item-count>)
  2909.         ==> returns <listwidget>.
  2910.  
  2911.     This method deletes the items at <position> from <listwidget>. The
  2912.     number of items to delete at <position> is specified by
  2913.     <item-count>. A position of zero deletes the last item on the list.
  2914.  
  2915.     This method gives an XtWarning if the item doesn't exist.
  2916.     <position> is an positive fixnum.
  2917.     <item-count> is an positive fixnum.
  2918. #endif /* MOTIF_1.1 */
  2919.  
  2920. *** XmListDeletePos():
  2921.  
  2922.     (send <listwidget> :DELETE_POS <position>)
  2923.          ==> returns <listwidget>.
  2924.  
  2925.     This method deletes the item at <position> from <listwidget>. A
  2926.     position of zero deletes the last item on the list. Gives an
  2927.     XtWarning if the item doesn't exist. <position> is an positive fixnum. 
  2928.  
  2929. *** XmListDeselectAllItems():
  2930.  
  2931.     (send <listwidget> :DESELECT_ALL_ITEMS)
  2932.          ==> returns <listwidget>.
  2933.  
  2934.     This method unhighlights all selected items and removes all items
  2935.     from the selected items list.
  2936.  
  2937. *** XmListDeselectItem():
  2938.  
  2939.     (send <listwidget> :DESELECT_ITEM <item>)
  2940.          ==> returns <item> as an XmString
  2941.  
  2942.     This method removes the specified <item> from the selected list and
  2943.     unhighlights it.
  2944.  
  2945.     <item> is a string or XmString. If <item> is given as a string, it
  2946.     is converted to an XmString and that XmString is returned by the
  2947.     method.
  2948.  
  2949. *** XmListDeselectPos():
  2950.  
  2951.     (send <listwidget> :DESELECT_POS <position>)
  2952.          ==> returns <listwidget>.
  2953.  
  2954.     This method removes the item associated with <position> from the
  2955.     selected list and unhighlights it.
  2956.  
  2957.     <position> is an positive fixnum. 
  2958.  
  2959. #ifdef MOTIF_1.1
  2960. *** XmListGetMatchPos() [Motif 1.1 only]
  2961.     (send <listwidget> :GET_MATCH_POS <item>)
  2962.         ==> returns an array of FIXNUMS, each representing the
  2963.         position of <item> in <listwidget>. Returns NIL if no matches
  2964.         found for <item>.
  2965.  
  2966.     <item> is a string or XmString. If <item> is given as a string, it
  2967.     is converted to an XmString.
  2968. #endif /* MOTIF_1.1 */
  2969.  
  2970. #ifdef MOTIF_1.1
  2971. *** XmListGetSelectedPos() [Motif 1.1 only]
  2972.     (send <listwidget> :GET_SELECTED_POS)
  2973.         ==> returns an array of FIXNUMS, each representing the
  2974.         position of the selected items in <listwidget>. Returns NIL
  2975.         if there are no selected items.
  2976. #endif /* MOTIF_1.1 */
  2977.  
  2978. *** XmListItemExists():
  2979.  
  2980.     (send <listwidget> :ITEM_EXISTS <item>)
  2981.          ==> returns T if the item is in the specified list widget,
  2982.          else NIL.
  2983.  
  2984.     <item> is a string or XmString. If <item> is given as a string, it
  2985.     is converted to an XmString.
  2986.  
  2987. #ifdef MOTIF_1.1
  2988. *** XmListItemPos() [Motif 1.1 only]
  2989.  
  2990.     (send <listwidget> :ITEM_POS <item>)
  2991.         ==> returns FIXNUM position of the first instance of <item> in
  2992.         <listwidget>. If <item> doesn't exist, returns NIL.
  2993.  
  2994.     <item> is a string or XmString. If <item> is given as a string, it
  2995.     is converted to an XmString. Note that the position of thefirst item
  2996.     in the list is 1, not 0.
  2997. #endif /* MOTIF_1.1 */
  2998.  
  2999. #ifdef MOTIF_1.1
  3000. *** XmListReplaceItems() [Motif 1.1 only]
  3001.  
  3002.     (send <listwidget> :REPLACE_ITEMS <old-item-seq> <new-item-seq>)
  3003.         ==> returns <listwidget>
  3004.  
  3005.     This method replaces each specified item of the sequence <old-item-seq>
  3006.     with a corresponding new item from <new-item-seq>.
  3007.  
  3008.     <old-item-seq> and <new-item-seq> is a list or array of strings or
  3009.     XmStrings.  Note that if strings are given, they will automatically
  3010.     be converted to XmStrings before being passed to <listwidget>.
  3011. #endif /* MOTIF_1.1 */
  3012.  
  3013. #ifdef MOTIF_1.1
  3014. *** XmListReplaceItemsPos() [Motif 1.1 only]
  3015.  
  3016.     (send <listwidget> :REPLACE_ITEMS_POS <item-seq> <position>)
  3017.         ==> returns <listwidget>
  3018.  
  3019.     This method replaces the items beginning at <position> with the
  3020.     items specified in <item-seq>. <item-seq> is a list or array of
  3021.     strings or XmStrings. Note that if strings are given, they will
  3022.     automatically be converted to XmStrings before being passed to
  3023.     <listwidget>.
  3024. #endif /* MOTIF_1.1 */
  3025.  
  3026. *** XmListSelectItem():
  3027.  
  3028.     (send <listwidget> :SELECT_ITEM <item> [<notify_p>])
  3029.          ==> returns <item> as an XmString
  3030.  
  3031.     This method adds <item> to the selected items list and highlights it.
  3032.  
  3033.     <item> is a string or XmString. If <item> is given as a string, it
  3034.     is converted to an XmString and that XmString is returned by the
  3035.     method.
  3036.  
  3037.     <notify_p> is an optional boolean parameter. If non-NIL, it will
  3038.     issue a    callback indicating an item has been selected.
  3039.  
  3040. *** XmListSelectPos():
  3041.  
  3042.     (send <listwidget> :SELECT_POS <position> [<notify_p>])
  3043.          ==> returns <listwidget>.
  3044.  
  3045.     This method adds the item corresponding to <position> to the selected
  3046.     items list and highlights it.
  3047.  
  3048.     <position> is an positive fixnum. 
  3049.  
  3050.     <notify_p> is an optional boolean parameter. If non-NIL, it will
  3051.     issue a    callback indicating an item has been selected.
  3052.  
  3053. #ifdef MOTIF_1.1
  3054. *** XmListSetAddMode() [Motif 1.1 only]
  3055.  
  3056.     (send <listwidget> :SET_ADD_MODE <add-mode-p>)
  3057.         ==> returns <listwidget>
  3058.  
  3059.     <add-mode-p> is a boolean. If <add-mode-p> non-NIL, then <listwidget>
  3060.     will be set into add mode. This allows application-control over
  3061.     Add Mode in the extended selection model.
  3062. #endif /* MOTIF_1.1 */
  3063.  
  3064. *** XmListSetBottomItem():
  3065.  
  3066.     (send <listwidget> :SET_BOTTOM_ITEM <item>)
  3067.          ==> returns <item> as an XmString
  3068.  
  3069.     This method makes <item> be the last visible position in the list.
  3070.     <item> is a string or XmString. If <item> is given as a string, it
  3071.     is converted to an XmString and that XmString is returned by the
  3072.     method.
  3073.  
  3074. *** XmListSetBottomPos():
  3075.  
  3076.     (send <listwidget> :SET_BOTTOM_POS <position>)
  3077.          ==> returns <listwidget>.
  3078.  
  3079.     This method makes the item associated with <position> be the last
  3080.     visible    position in the list.
  3081.  
  3082.     <position> is an positive fixnum. 
  3083.  
  3084. *** XmListSetHorizPos():
  3085.  
  3086.     (send <listwidget> :SET_HORIZ_POS <position>)
  3087.          ==> returns <listwidget>.
  3088.  
  3089.     This method scrolls the list horizontally such that the scrollbar
  3090.     reflects <position> in the list.
  3091.  
  3092.     <position> is an positive fixnum. 
  3093.  
  3094. *** XmListSetItem():
  3095.  
  3096.     (send <listwidget> :SET_ITEM <item>)
  3097.          ==> returns <item> as an XmString
  3098.  
  3099.     This method makes <item> be the first visible item in the
  3100.     list. <item> is a string or XmString. If <item> is given as a
  3101.     string, it is converted to an XmString and that XmString is
  3102.     returned by the method.
  3103.  
  3104. *** XmListSetPos():
  3105.  
  3106.     (send <listwidget> :SET_POS <position>)
  3107.          ==> returns <listwidget>.
  3108.  
  3109.     This method makes the item associated with <position> be the first
  3110.     visible element of the list.
  3111.  
  3112.     <position> is an positive fixnum. 
  3113.  
  3114. *** XtGetValues(XmNitems/XmNitemCount):
  3115.  
  3116.     (send <listwidget> :GET_ITEMS)
  3117.         --> returns an array of XM_STRING, each representing
  3118.         an item in the list widget.
  3119.  
  3120.     This method allows retrieval of list widget resource XmNitems.
  3121.     Due to flaws in Motif/Xt design, :GET_VALUES on resource
  3122.     :XMN_ITEMS cannot be done in a straightforward fashion.
  3123.     I've worked around that limitation by providing this method.
  3124.  
  3125. *** XtGetValues(XmNselectedItems/XmNselectedItemCount):
  3126.  
  3127.     (send <listwidget> :GET_SELECTED_ITEMS)
  3128.         --> returns an array of XM_STRING, each representing
  3129.         a selected item in the list widget.
  3130.  
  3131.     This method allows retrieval of list widget resource XmNselectedItems.
  3132.     Due to flaws in Motif/Xt design, :GET_VALUES on resource
  3133.     :XMN_SELECTED_ITEMS cannot be done in a straightforward fashion.
  3134.     I've worked around that limitation by providing this method.
  3135.  
  3136. ______________________________________________________________________________
  3137.  
  3138. ** XM_MAIN_WINDOW_WIDGET_CLASS
  3139.  
  3140. *** equivalent Xt 'WidgetClass':
  3141.  
  3142.     xmMainWindowWidgetClass
  3143.  
  3144. *** equivalent creation convenience function:
  3145.  
  3146.     (send XM_MAIN_WINDOW_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3147.         --> XmCreateMainWindow()
  3148.  
  3149. ***  XmMainWindowSetAreas():
  3150.  
  3151.     (send <mainwinwidget> :SET_AREAS <menu> <command> <hscroll> <vscroll>
  3152.                                      <workregion>)
  3153.          ==> returns <mainwinwidget>.
  3154.  
  3155.     This method is used to attach children to be managed by an instance of
  3156.     XM_MAIN_WINDOW_WIDGET_CLASS. <menu> <command> <hscroll> <vscroll>
  3157.     and <workregion> are all WIDGETOBJs that must be created (with
  3158.     MainWindow as parent) before calling :SET_AREAS.
  3159.     If you don't want to set a particular region, pass NIL as the argument
  3160.     for the particular widget.
  3161.  
  3162.     <menu> specifies the WIDGETOBJ for the MenuBar to be
  3163.     associated with the MainWindow widget The resource name associated
  3164.     with this argument is :XMN_MENU_BAR.
  3165.  
  3166.     <command> specifies the WIDGETOBJ for the command window to be
  3167.     associated with the MainWindow widget. The resource name associated
  3168.     with this argument is :XMN_COMMAND_WINDOW.
  3169.  
  3170.     <hscroll> specifies the WIDGETOBJ for the horizontal ScrollBar to
  3171.     be associated with the MainWindow widget. The resource name associated
  3172.     with this argument is :XMN_HORIZONTAL_SCROLL_BAR.
  3173.  
  3174.     <vscroll> specifies the WIDGETOBJ for the vertical ScrollBar to be
  3175.     associated with the MainWindow widget. The resource name associated
  3176.     with this argument is :XMN_VERTICAL_SCROLL_BAR.
  3177.  
  3178.     <workregion> specifies the WIDGETOBJ for the work window to be
  3179.     associated with the MainWindow widget. The resource name associated
  3180.     with this argument is :XMN_WORK_WINDOW.
  3181.  
  3182. *** XmMainWindowSep1():
  3183.  
  3184.     (send <mainwinwidget> :SEP1)
  3185.           ==> returns the WIDGETOBJ corresponding to the first
  3186.           separator widget.
  3187.  
  3188.     The first separator widget is located between the MenuBar and the
  3189.     Command widget.  This separator is visible only when
  3190.     resource :XMN_SHOW_SEPARATOR is T.
  3191.  
  3192. *** XmMainWindowSep2():
  3193.  
  3194.     (send <mainwinwidget> :SEP2)
  3195.           ==> returns the WIDGETOBJ corresponding to the second
  3196.           separator widget.
  3197.  
  3198.     The second Separator widget is located between the Command widget
  3199.     and the ScrolledWindow.  This Separator is visible only when
  3200.     resource :XMN_SHOW_SEPARATOR is T.
  3201.  
  3202. #ifdef MOTIF_1.1
  3203. *** XmMainWindowSep3():  [Motif 1.1 only]
  3204.  
  3205.     (send <mainwinwidget> :SEP3)
  3206.           ==> returns the WIDGETOBJ corresponding to the third
  3207.           separator widget.
  3208.  
  3209.     The third Separator widget is located between the message window
  3210.     and the widget above it. This Separator is visible only when
  3211.     resource :XMN_SHOW_SEPARATOR is T.
  3212. #endif /* MOTIF_1.1 */
  3213. ______________________________________________________________________________
  3214.  
  3215. ** XM_MESSAGE_BOX_WIDGET_CLASS
  3216.  
  3217. *** equivalent Xt 'WidgetClass':
  3218.  
  3219.     xmMessageBoxWidgetClass
  3220.  
  3221. *** equivalent creation convenience function:
  3222.  
  3223.     (send XM_MESSAGE_BOX_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3224.         --> XmCreateMessageBox()
  3225.  
  3226.     (send XM_MESSAGE_BOX_WIDGET_CLASS :new [:managed/:unmanaged]
  3227.               :MESSAGE_DIALOG ...)
  3228.         --> XmCreateMessageDialog()
  3229.  
  3230.     (send XM_MESSAGE_BOX_WIDGET_CLASS :new [:managed/:unmanaged]
  3231.               :ERROR_DIALOG ...)
  3232.         --> XmCreateErrorDialog()
  3233.  
  3234.     (send XM_MESSAGE_BOX_WIDGET_CLASS :new [:managed/:unmanaged]
  3235.               :INFORMATION_DIALOG ...)
  3236.         --> XmCreateInformationDialog()
  3237.  
  3238.     (send XM_MESSAGE_BOX_WIDGET_CLASS :new [:managed/:unmanaged]
  3239.           :QUESTION_DIALOG ...)
  3240.         --> XmCreateQuestionDialog()
  3241.  
  3242.     (send XM_MESSAGE_BOX_WIDGET_CLASS :new [:managed/:unmanaged]
  3243.               :WARNING_DIALOG ...)
  3244.         --> XmCreateWarningDialog()
  3245.  
  3246.     (send XM_MESSAGE_BOX_WIDGET_CLASS :new [:managed/:unmanaged]
  3247.               :WORKING_DIALOG ...)
  3248.         --> XmCreateWorkingDialog()
  3249.  
  3250. *** XmMessageBoxGetChild():
  3251.  
  3252.     (send <messageboxwidget> :GET_CHILD <symbol>)
  3253.         --> returns a WIDGETOBJ, the child of <messageboxwidget> 
  3254.         corresponding to one of the following keyword <symbol>s:
  3255.             :DIALOG_DEFAULT_BUTTON
  3256.             :DIALOG_SYMBOL_LABEL
  3257.             :DIALOG_MESSAGE_LABEL
  3258.             :DIALOG_OK_BUTTON
  3259.             :DIALOG_CANCEL_BUTTON
  3260.             :DIALOG_HELP_BUTTON
  3261.             :DIALOG_SEPARATOR
  3262. ______________________________________________________________________________
  3263.  
  3264. ** XM_PANED_WINDOW_WIDGET_CLASS
  3265.  
  3266. *** equivalent Xt 'WidgetClass':
  3267.  
  3268.     xmPanedWindowWidgetClass
  3269.  
  3270. *** equivalent creation convenience function:
  3271.  
  3272.     (send XM_PANED_WINDOW_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3273.         --> XmCreatePanedWindow()
  3274. ______________________________________________________________________________
  3275.  
  3276. ** XM_PUSH_BUTTON_WIDGET_CLASS / XM_PUSH_BUTTON_GADGET_CLASS
  3277.  
  3278. *** equivalent Xt 'WidgetClass':
  3279.  
  3280.     xmPushButtonWidgetClass
  3281.     xmPushButtonGadgetClass
  3282.  
  3283. *** equivalent creation convenience function:
  3284.  
  3285.     (send XM_PUSH_BUTTON_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3286.         --> XmCreatePushButton()
  3287.  
  3288.     (send XM_PUSH_BUTTON_GADGET_CLASS :new [:managed/:unmanaged] ...)
  3289.         --> XmCreatePushButtonGadget()
  3290.  
  3291. *** XtAddCallback():
  3292.  
  3293.    #ifdef MOTIF_1.0
  3294.     In Motif 1.0, :ADD_CALLBACK/:SET_CALLBACK on push buttons will
  3295.     use the :ADD_CALLBACK/:SET_CALLBACK methods defined on
  3296.     <WIDGET_CLASS>, the XmAnyCallbackStruct fields defined on those
  3297.     methods will be valid.
  3298.    #endif /* MOTIF_1.0 */
  3299.  
  3300.    #ifdef MOTIF_1.1
  3301.     (send <push-button> :ADD_CALLBACK ...)
  3302.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3303.     (send <push-button> :SET_CALLBACK ...)
  3304.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3305.  
  3306.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  3307.     methods on WIDGET_CLASS except that these methods understand
  3308.     how to get call_data values from the XmPushButtonCallbackStruct
  3309.         typedef struct
  3310.         {
  3311.            int        reason;
  3312.            XEvent    *event;
  3313.            int        click_count;
  3314.         } XmPushButtonCallbackStruct;
  3315.  
  3316.     Specifying one or more of the following symbols in the callback
  3317.     bindings list will bind that symbol's value in the lexical
  3318.     environment of the callback:
  3319.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  3320.         CALLBACK_REASON -- the reason symbol for the callback
  3321.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  3322.         CALLBACK_CLICK_COUNT -- a FIXNUM representing the number of
  3323.                     clicks upon the button. The click count
  3324.                     will only be > 1 when resource 
  3325.                     :XMN_MULTI_CLICK == :MULTICLICK_KEEP
  3326.    #endif /* MOTIF_1.1 */
  3327. ______________________________________________________________________________
  3328.  
  3329. ** XM_ROW_COLUMN_WIDGET_CLASS
  3330.  
  3331. *** equivalent Xt 'WidgetClass':
  3332.  
  3333.     xmRowColumnWidgetClass
  3334.  
  3335. *** equivalent creation convenience function:
  3336.  
  3337.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3338.         --> XmCreateRowColumn()
  3339.  
  3340.    #ifdef MOTIF_1.1
  3341.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged] ...
  3342.           :WORK_AREA ...)
  3343.         -->  XmCreateWorkArea();
  3344.    #endif /* MOTIF_1.1 */
  3345.  
  3346.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3347.           :RADIO_BOX ...)
  3348.         --> XmCreateRadioBox()
  3349.  
  3350.    #ifdef MOTIF_1.1
  3351.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3352.           :SIMPLE_RADIO_BOX ...)
  3353.         -->  XmCreateSimpleRadioBox();
  3354.    #endif /* MOTIF_1.1 */
  3355.  
  3356.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3357.           :OPTION_MENU ...)
  3358.         --> XmCreateOptionMenu()
  3359.  
  3360.    #ifdef MOTIF_1.1
  3361.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3362.           :SIMPLE_OPTION_MENU ...)
  3363.         --> XmCreateSimpleOptionMenu();
  3364.    #endif /* MOTIF_1.1 */
  3365.  
  3366.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3367.           :MENU_BAR ...)
  3368.         --> XmCreateMenuBar()
  3369.  
  3370.    #ifdef MOTIF_1.1
  3371.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3372.           :SIMPLE_MENU_BAR ...)
  3373.         --> XmCreateSimpleMenuBar();
  3374.    #endif /* MOTIF_1.1 */
  3375.  
  3376.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3377.           :POPUP_MENU ...)
  3378.         --> XmCreatePopupMenu()
  3379.  
  3380.    #ifdef MOTIF_1.1
  3381.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3382.           :SIMPLE_POPUP_MENU ...)
  3383.         --> XmCreateSimplePopupMenu();
  3384.    #endif /* MOTIF_1.1 */
  3385.  
  3386.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3387.           :PULLDOWN_MENU ...)
  3388.         --> XmCreatePulldownMenu()
  3389.  
  3390.    #ifdef MOTIF_1.1
  3391.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3392.           :SIMPLE_PULLDOWN_MENU ...)
  3393.         --> XmCreateSimplePulldownMenu();
  3394.    #endif /* MOTIF_1.1 */
  3395.  
  3396.    #ifdef MOTIF_1.1
  3397.     (send XM_ROW_COLUMN_WIDGET_CLASS :new [:managed/:unmanaged]
  3398.           :SIMPLE_CHECK_BOX ...)
  3399.         --> XmCreateSimpleCheckBox();
  3400.    #endif /* MOTIF_1.1 */
  3401.  
  3402. *** XtAddCallback():
  3403.  
  3404.     (send <rowcolwidget> :ADD_CALLBACK ...)
  3405.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3406.     (send <rowcolwidget> :SET_CALLBACK ...)
  3407.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3408.  
  3409.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  3410.     methods on WIDGET_CLASS except that these methods understand
  3411.     how to get call_data values from the XmRowColumnCallbackStruct:
  3412.         typedef struct
  3413.         {
  3414.             int     reason;
  3415.             XEvent  *event;
  3416.             Widget  widget;
  3417.             char    *data;
  3418.             char    *callbackstruct;
  3419.         } XmRowColumnCallbackStruct;
  3420.  
  3421.     Specifying one or more of the following symbols in the callback
  3422.     bindings list will bind that symbol's value in the lexical
  3423.     environment of the callback:
  3424.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  3425.         CALLBACK_REASON -- the reason symbol for the callback
  3426.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  3427.     
  3428.     If the you're doing 
  3429.     (send <rowcolwidget> :ADD_CALLBACK :XMN_ENTRY_CALLBACK ...) or
  3430.     (send <rowcolwidget> :SET_CALLBACK :XMN_ENTRY_CALLBACK ...)
  3431.     then the following symbols may be bound to call_data values from the
  3432.     entry widget in <rowcolwidget> that fired:
  3433.  
  3434.         CALLBACK_ENTRY_WIDGET -- a WIDGETOBJ representing the child
  3435.                      of <rowcolwidget> that fired.
  3436.         CALLBACK_ENTRY_REASON -- the reason SYMBOL for an
  3437.                      entrywidget of class
  3438.                      XM_TOGGLE_BUTTON_GADGET_CLASS or
  3439.                      XM_TOGGLE_BUTTON_WIDGET_CLASS
  3440.         CALLBACK_ENTRY_SET    -- T if the entrywidget is a
  3441.                      set toggle button, NIL if
  3442.                      an unset togglebutton. IF not a
  3443.                      togglebutton, then results
  3444.                      unpredictable.
  3445.        #ifdef MOTIF_1.1
  3446.         CALLBACK_ENTRY_CLICK_COUNT -- a FIXNUM representing the number of
  3447.                           clicks upon the entry-button. The
  3448.                           click count will only be > 1 when
  3449.                           the entry-button's resource
  3450.                           :XMN_MULTI_CLICK is set to
  3451.                           :MULTICLICK_KEEP. This callback
  3452.                           symbol should only be used if the
  3453.                           entry is a button -- unpredictable
  3454.                           results will occur for other cases.
  3455.        #endif /* MOTIF_1.1 */
  3456.         CALLBACK_ENTRY_DATA   -- if a callback was set for the
  3457.                      entry widget, this will be it's
  3458.                      CALLBACKOBJ. Uses for this
  3459.                      parameter are unknown and
  3460.                      unpredictable. 
  3461.  
  3462. *** Note on XmCreateSimple*() routines:
  3463.  
  3464.     If you use any of the XmCreateSimple*() routines above, you
  3465.     will also want to set the following resources (which are settable
  3466.     only at widget creation    time) :XMN_POST_FROM_BUTTON,
  3467.     :XMN_BUTTON_COUNT, :XMN_BUTTONS, :XMN_BUTTON_MNEMONICS,
  3468.     :XMN_BUTTON_MNEMONIC_CHAR_SETS,    :XMN_BUTTON_ACCELERATORS,
  3469.     :XMN_BUTTON_ACCELERATOR_TEXT, :XMN_BUTTON_TYPE, :XMN_BUTTON_SET,
  3470.     :XMN_OPTION_LABEL, :XMN_OPTION_MNEMONIC.
  3471.  
  3472.     For example, the following code will create a menu-bar, and 
  3473.     the first pulldown of the menu-bar entry ("Files"):
  3474.  
  3475.   (setq menubar_w
  3476.     (send XM_ROW_COLUMN_WIDGET_CLASS :new :managed :simple_menu_bar
  3477.           "menubar" main_w
  3478.           :XMN_BUTTON_COUNT 5    ;create file cascadebuttons in menubar
  3479.           :XMN_BUTTONS
  3480.                   #("Files" "Edit" "Fold" "Spindle" "Mutilate")
  3481.           :XMN_BUTTON_MNEMONICS
  3482.             #(#\F     #\E    #\o    #\S       #\M)
  3483.           ))
  3484.  
  3485.    (setq pulldown_w
  3486.      (send XM_ROW_COLUMN_WIDGET_CLASS :new :simple_pulldown_menu
  3487.            "pulldown" menubar_w
  3488.            :XMN_POST_FROM_BUTTON 0    ;post pulldown from menubar's "Files"
  3489.            :XMN_BUTTON_COUNT 5    ;create five buttons in this pulldown
  3490.            :XMN_BUTTONS
  3491.             #("Quit" "Open" "Open in New Window" "Save" "Save As")
  3492.            :XMN_BUTTON_MNEMONICS
  3493.             #(#\Q    #\O    #\N                  #\S    #\A)
  3494.            :XMN_BUTTON_MNEMONIC_CHAR_SETS
  3495.             #("" "" "ISO8859-1" "ISO8859-1" "ISO8859-1")
  3496.            :XMN_BUTTON_ACCELERATORS
  3497.             #("Ctrl<Key>C" "Ctrl<Key>F" "Ctrl<Key>O" "Ctrl<Key>S" "Ctrl<Key>W")
  3498.            :XMN_BUTTON_ACCELERATOR_TEXT
  3499.             #("^C" "^F" "^O" "^S" "^W")
  3500.            :XMN_BUTTON_TYPE 
  3501.             #(:PUSHBUTTON :PUSHBUTTON :PUSHBUTTON :PUSHBUTTON
  3502.               :PUSHBUTTON)
  3503.            ))
  3504.  
  3505.     Note: WINTERP does not provide an interface to XmNsimpleCallback, which
  3506.     is the newfangled way Motif expects you to set up callbacks on
  3507.     widgets created by XmCreateSimple*(). Instead, WINTERP employs an
  3508.     already existing means of setting callbacks in the row-column widget --
  3509.     XmNentryCallback (:XMN_ENTRY_CALLBACK). This is a truly amazing concept
  3510.     for Motif, being able to use the same code and techniques to do slightly
  3511.     different things. Reuse and polymorphism -- what a concept, dude!
  3512.  
  3513.     The following example sets up a callback on pulldown_w which was
  3514.     created by XmCreateSimplePulldownMenu() in the example above. The
  3515.     callback will print the message associated with the function behind
  3516.     each button in the menu:
  3517.         
  3518.    (send pulldown_w
  3519.      :add_callback :xmn_entry_callback ;use instead of XmNsimpleCallback
  3520.      '(CALLBACK_ENTRY_WIDGET)    ;gets bound to widget causing c.b.
  3521.      '(
  3522.        ;; (send CALLBACK_ENTRY_WIDGET :name) returns "button_<#>"
  3523.        ;; where <#> is 0 ... (:XMN_BUTTON_COUNT - 1).
  3524.        ;; we use 'read' to return the FIXNUM <#> after truncating the
  3525.        ;; 7 chars "button_" from the front of the string.
  3526.        (case (read (make-string-input-stream
  3527.             (send CALLBACK_ENTRY_WIDGET :name) 7))
  3528.          (0 (format T "Quit Function Called\n"))
  3529.          (1 (format T "Open Function Called\n"))
  3530.          (2 (format T "Open in New Window Function Called\n"))
  3531.          (3 (format T "Save Function Called\n"))
  3532.          (4 (format T "Save As Function Called\n"))
  3533.          (T (format T "Error\n")))
  3534.        ))
  3535.  
  3536.     For further examples of using XmCreateSimple*() routines, see
  3537.     ./../examples/fake-app.lsp and
  3538.     ./../examples/RowColumn.lsp.
  3539.  
  3540. *** XmMenuPosition():
  3541.  
  3542.     (send <popup_menu> :MENU_POSITION <event>)
  3543.          ==> returns <popup_menu>
  3544.  
  3545.     This method will position a popup menupane at the position
  3546.     specified by event->x_root, event->y_root, where <event> is an XEvent.
  3547.     This method should only be used on a row_column widget created via
  3548.     (send XM_ROW_COLUMN_WIDGET_CLASS :new :popup_menu ...).
  3549.  
  3550. *** XmOptionLabelGadget():
  3551.  
  3552.     (send <option_menu> :OPTION_LABEL_GADGET)
  3553.          ==> returns the WIDGETOBJ corresponding to the label
  3554.              gadget created in an <option_menu> instance. 
  3555.  
  3556.     This method should only be used on a rowcolumn instance created
  3557.     via (send XM_ROW_COLUMN_WIDGET_CLASS :new :option_menu ...)
  3558.  
  3559. *** XmOptionButtonGadget():
  3560.  
  3561.     (send <option_menu> :OPTION_BUTTON_GADGET)
  3562.          ==> returns the WIDGETOBJ corresponding to the cascade
  3563.              button gadget created in an <option_menu> instance.
  3564.  
  3565.     This method should only be used on a rowcolumn instance created
  3566.     via (send XM_ROW_COLUMN_WIDGET_CLASS :new :option_menu ...)
  3567.  
  3568. #ifdef MOTIF_1.1
  3569. *** XmGetPostedFromWidget(): [Motif 1.1 only]
  3570.  
  3571.     (send <menu> :GET_POSTED_FROM_WIDGET)
  3572.         ==> returns the WIDGETOBJ corresponding to the
  3573.             the widget from which the menu was posted.
  3574.  
  3575.     This method returns the WIDGETOBJ from which a menu was posted. An
  3576.     application can use this routine during the activate callback to
  3577.     determine the context in which the menu callback should be interpreted.
  3578.  
  3579.     In a popup, the widget returned is the widget which initiated the
  3580.     post. In a pulldown from a menubar or option menu, then the
  3581.     returned widget is the menubar or option menu.
  3582. #endif /* MOTIF_1.1 */
  3583.  
  3584. #ifdef MOTIF_1.1
  3585. *** XtGetValues(...XmNsubMenuId...): [Motif 1.1 only -- Motif bug work-around]
  3586.  
  3587.     (send <rowcolwidget> :GET_SUB_MENU_WIDGET)
  3588.         ==> this method returns the WIDGETOBJ corresponding to the
  3589.         the widget returned by resource XmNsubMenuId.
  3590.  
  3591.     Why use this instead of XmNsubMenuId?? Because due to some weird
  3592.     Motif 1.1 bug, (probably in motif) doing
  3593.     (send <rowcolwidget> :get_values :XMN_SUB_MENU_ID nil) returns
  3594.     <rowcolwidget>. ???
  3595. #endif /* MOTIF_1.1 */
  3596.  
  3597. *** NOTE on msgs :MENU_POSITION :OPTION_BUTTON_GADGET :OPTION_LABEL_GADGET, GET_POSTED_FROM_WIDGET, and :GET_SUB_MENU_WIDGET:
  3598.  
  3599.     Future versions of WINTERP may create a special POPUP_MENU_CLASS
  3600.     and OPTION_MENU_CLASS subclasses of XM_ROW_COLUMN_WIDGET_CLASS that
  3601.     have :MENU_POSITION and {:OPTION_BUTTON_GADGET,:OPTION_LABEL_GADGET}
  3602.     as methods in order to avoid problems with using these methods on the
  3603.     wrong row column widget variant.
  3604. ______________________________________________________________________________
  3605.  
  3606. ** XM_SCALE_WIDGET_CLASS
  3607.  
  3608. *** equivalent Xt 'WidgetClass':
  3609.  
  3610.     xmScaleWidgetClass
  3611.  
  3612. *** equivalent creation convenience function:
  3613.  
  3614.     (send XM_SCALE_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3615.         --> XmCreateScale()
  3616.  
  3617. *** XtAddCallback():
  3618.  
  3619.     (send <scale_widget> :ADD_CALLBACK ...)
  3620.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3621.     (send <scale_widget> :SET_CALLBACK ...)
  3622.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3623.  
  3624.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  3625.     methods on WIDGET_CLASS except that these methods understand
  3626.     how to get call_data values from the XmScaleCallbackStruct:
  3627.         typedef struct 
  3628.         {
  3629.            int reason;
  3630.            XEvent * event;
  3631.            int value;
  3632.         } XmScaleCallbackStruct;
  3633.  
  3634.     Specifying one or more of the following symbols in the callback
  3635.     bindings list will bind that symbol's value in the lexical
  3636.     environment of the callback:
  3637.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  3638.         CALLBACK_REASON -- the reason symbol for the callback
  3639.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  3640.         CALLBACK_VALUE  -- a FIXNUM representing the slider location.
  3641.  
  3642. *** XmScaleSetValue():
  3643.  
  3644.     (send <scale_widget> :SET_VALUE <value>)
  3645.         ==> returns <scale_widget>
  3646.  
  3647.     This method sets the <scale_widget>'s slider position to <value>, a
  3648.     FIXNUM.
  3649.  
  3650. *** XmScaleGetValue():
  3651.  
  3652.     (send <scale_widget> :GET_VALUE)
  3653.         --> returns slider value as a FIXNUM
  3654. ______________________________________________________________________________
  3655.  
  3656. ** XM_SCROLLED_WINDOW_WIDGET_CLASS
  3657.  
  3658. *** equivalent Xt 'WidgetClass':
  3659.  
  3660.     xmScrolledWindowWidgetClass
  3661.  
  3662. *** equivalent creation convenience function:
  3663.  
  3664.     (send XM_SCROLLED_WINDOW_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3665.         --> XmCreateScrolledWindow()
  3666.  
  3667. *** XmScrolledWindowSetAreas():
  3668.  
  3669.     (send <ScrolledWin_Widget> :SET_AREAS <hscroll> <vscroll> <wregion>)
  3670.         --> returns <ScrolledWin_Widget>
  3671.  
  3672.     This method allows you to add or change the work region controlled by
  3673.     a scrolled window, and set the scrollbars for scrolled windows in which
  3674.     resource :XMN_SCROLLING_POLICY is set to :APPLICATION_DEFINED.
  3675.     <wregion> <hscroll> and  <vscroll> are all WIDGETOBJs. Use NIL
  3676.     if you don't want to set a particular parameter.
  3677. ______________________________________________________________________________
  3678.  
  3679. ** XM_SCROLL_BAR_WIDGET_CLASS
  3680.  
  3681. *** equivalent Xt 'WidgetClass':
  3682.  
  3683.     xmScrollBarWidgetClass
  3684.  
  3685. *** equivalent creation convenience function:
  3686.  
  3687.     (send XM_SCROLL_BAR_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3688.         --> XmCreateScrollBar()
  3689.  
  3690. *** XtAddCallback():
  3691.     (send <scrollbar_widget> :ADD_CALLBACK ...)
  3692.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3693.     (send <scrollbar_widget> :SET_CALLBACK ...)
  3694.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3695.  
  3696.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  3697.     methods on WIDGET_CLASS except that these methods understand
  3698.     how to get call_data values from the XmScrollBarCallbackStruct:
  3699.         typedef struct
  3700.         {
  3701.            int reason;
  3702.            XEvent * event;
  3703.            int value;
  3704.            int pixel;
  3705.         } XmScrollBarCallbackStruct;
  3706.  
  3707.     Specifying one or more of the following symbols in the callback
  3708.     bindings list will bind that symbol's value in the lexical
  3709.     environment of the callback:
  3710.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  3711.         CALLBACK_REASON -- the reason symbol for the callback
  3712.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  3713.         CALLBACK_VALUE  -- a FIXNUM representing the slider location.
  3714.         CALLBACK_PIXEL  -- a FIXNUM representing the coordinate of
  3715.                    the mouse button selection. For a
  3716.                    vertical scrollbar, it's the 'y'
  3717.                    coordinate; For a horizontal scrollbar,
  3718.                    it's the 'x' coordinate.
  3719.                    NOTE: The value is valid only for callbacks
  3720.                    :XMN_TO_TOP_CALLBACK/:XMN_TO_BOTTOM_CALLBACK
  3721.  
  3722. *** XmScrollBarGetValues():
  3723.  
  3724.     (send <scrollbar_widget> :GET_VALUE) 
  3725.         ==> returns a list
  3726.         (<value> <slider_size> <increment> <page_increment>)
  3727.         all of which are FIXNUMs representing  the values of resources
  3728.         :XMN_VALUE, :XMN_SLIDER_SIZE, :XMN_INCREMENT, and
  3729.         :XMN_PAGE_INCREMENT respectively.
  3730.     
  3731.     Note that I couldn't call this method :GET_VALUES (for consistency
  3732.     with the name XmScrollBarGetValues()) because it would override
  3733.     method :GET_VALUES on WIDGET_CLASS.
  3734.  
  3735. *** XmScrollBarSetValues():
  3736.  
  3737.     (send <scrollbar_widget> :SET_VALUE <value> <slider_size> 
  3738.                                         [[[<increment>]
  3739.                           <page_increment>]
  3740.                          <notify>])
  3741.     ==> returns <scrollbar_widget>.
  3742.  
  3743.     <value> is a fixnum specifying the slider position
  3744.     (same as setting the resource :XMN_VALUE)
  3745.  
  3746.     <slider_size> is a fixnum specifying the size of the slider.
  3747.     (same as setting resource :XMN_SLIDER_SIZE).
  3748.  
  3749.     <increment> is an optional fixnum specifying the amount of button
  3750.     increment and decrement. (same as setting resource :XMN_INCREMENT).
  3751.  
  3752.     <page_increment> is an optional fixnum specifying the page
  3753.     increment size. (same as setting resource :XMN_INCREMENT).
  3754.  
  3755.     <notify> is an optional Boolean, if NIL, the value changed callback
  3756.     will not be activated, else it will.
  3757.     
  3758.     Note that I couldn't call this method :SET_VALUES (for consistency
  3759.     with name XmScrollBarSetValues()) because it would override method
  3760.     :SET_VALUES on WIDGET_CLASS.
  3761. ______________________________________________________________________________
  3762.  
  3763. ** XM_SELECTION_BOX_WIDGET_CLASS
  3764.  
  3765. *** equivalent Xt 'WidgetClass':
  3766.  
  3767.     xmSelectionBoxWidgetClass
  3768.  
  3769. *** equivalent creation convenience function:
  3770.  
  3771.     (send XM_SELECTION_BOX_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3772.         --> XmCreateSelectionBox()
  3773.  
  3774.     (send XM_SELECTION_BOX_WIDGET_CLASS :new [:managed/:unmanaged] :dialog ...)
  3775.         --> XmCreateSelectionDialog()
  3776.  
  3777.     (send XM_SELECTION_BOX_WIDGET_CLASS :new [:managed/:unmanaged] :prompt_dialog ...)
  3778.         --> XmCreatePromptDialog()
  3779.  
  3780. *** XtAddCallback():
  3781.  
  3782.     (send <selectionbox_widget> :ADD_CALLBACK ...)
  3783.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3784.     (send <selectionbox_widget> :SET_CALLBACK ...)
  3785.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3786.  
  3787.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  3788.     methods on WIDGET_CLASS except that these methods understand
  3789.     how to get call_data values from the XmSelectionBoxCallbackStruct:
  3790.         typedef struct
  3791.         {
  3792.             int reason;
  3793.             XEvent    *event;
  3794.             XmString    value;
  3795.             int    length;
  3796.         } XmSelectionBoxCallbackStruct;
  3797.  
  3798.     Specifying one or more of the following symbols in the callback
  3799.     bindings list will bind that symbol's value in the lexical
  3800.     environment of the callback:
  3801.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  3802.         CALLBACK_REASON -- the reason symbol for the callback
  3803.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  3804.         CALLBACK_VALUE  -- an XmString, the value selected from
  3805.                    the selectionbox list, or entered into
  3806.                    the selectionbox text field.
  3807.         CALLBACK_LENGTH -- the length of XmString CALLBACK_VALUE.
  3808.  
  3809. *** XmSelectionBoxGetChild():
  3810.  
  3811.     (send <selectionbox_widget> :get_child <childname>)
  3812.     ==> returns the WIDGETOBJ corresponding to <childname> which is one
  3813.         of the following keyword symbols:
  3814.         :DIALOG_LIST, :DIALOG_LIST_LABEL, :DIALOG_SELECTION_LABEL,
  3815.         :DIALOG_WORK_AREA, :DIALOG_TEXT, :DIALOG_SEPARATOR,
  3816.         :DIALOG_OK_BUTTON, :DIALOG_APPLY_BUTTON,
  3817.         :DIALOG_CANCEL_BUTTON, :DIALOG_HELP_BUTTON,
  3818.         :DIALOG_DEFAULT_BUTTON
  3819.  
  3820. *** XtGetValues(XmNlistItems/XmNlistItemCount):
  3821.  
  3822.     (send <selectionbox_widget> :GET_LIST_ITEMS)
  3823.         --> returns an array of XM_STRING, each representing
  3824.         a selected item in the selection box's list widget.
  3825.  
  3826.     This method allows retrieval of list widget resource XmNlistItems.
  3827.     Due to flaws in Motif/Xt design, :GET_VALUES on resource
  3828.     :XMN_LIST_ITEMS cannot be done in a straightforward fashion.
  3829.     I've worked around that limitation by providing this method.
  3830.  
  3831. ______________________________________________________________________________
  3832.  
  3833. ** XM_SEPARATOR_WIDGET_CLASS / XM_SEPARATOR_GADGET_CLASS
  3834.  
  3835. *** equivalent Xt 'WidgetClass':
  3836.  
  3837.     xmSeparatorWidgetClass
  3838.     xmSeparatorGadgetClass
  3839.  
  3840. *** equivalent creation convenience function:
  3841.  
  3842.     (send XM_SEPARATOR_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3843.         --> XmCreateSeparator()
  3844.  
  3845.     (send XM_SEPARATOR_GADGET_CLASS :new [:managed/:unmanaged] ...)
  3846.         --> XmCreateSeparatorGadget()
  3847. ______________________________________________________________________________
  3848.  
  3849. ** XM_TEXT_WIDGET_CLASS // XM_TEXT_FIELD_WIDGET_CLASS
  3850.  
  3851. *** equivalent Xt 'WidgetClass':
  3852.  
  3853.     xmTextWidgetClass, xmTextFieldWidgetClass
  3854.  
  3855. *** equivalent creation convenience function:
  3856.  
  3857.    #ifdef MOTIF_1.1
  3858.     (send XM_TEXT_FIELD_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3859.         --> XmCreateTextField()
  3860.    #endif /* MOTIF_1.1 */
  3861.  
  3862.     (send XM_TEXT_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  3863.         --> XmCreateText()
  3864.  
  3865.     (send XM_TEXT_WIDGET_CLASS :new [:managed/:unmanaged] :scrolled ...)
  3866.         --> XmCreateScrolledText()
  3867.  
  3868.     Note -- the :scrolled text widget created by XmCreateScrolledText()
  3869.     is anomalous, since it returns a text widget whose parent is of
  3870.     class xmScrolledWindowWidgetClass. Unless special kludgery was
  3871.     added since the last time I looked at the source, this may result
  3872.     in problems in using this widget with managers and constraint
  3873.     manager as <parent>. If that happens, do (send <list_w> :parent)
  3874.     to retrieve the appropriate widget to be managed.
  3875.  
  3876. *** XtAddCallback():
  3877.  
  3878.     (send <text> :ADD_CALLBACK ...)
  3879.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3880.     (send <text> :SET_CALLBACK ...)
  3881.         --> returns: <callback_id_object> of type CALLBACKOBJ
  3882.  
  3883.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  3884.     methods on WIDGET_CLASS except that these methods understand
  3885.     how to get call_data values from the XmTextVerifyCallbackStruct:
  3886.         typedef struct
  3887.         {
  3888.             int reason;
  3889.             XEvent  *event;
  3890.             Boolean doit;
  3891.             XmTextPosition currInsert, newInsert;
  3892.             XmTextPosition startPos, endPos;
  3893.             XmTextBlock text;
  3894.         } XmTextVerifyCallbackStruct, *XmTextVerifyPtr;
  3895.  
  3896.     Specifying one or more of the following symbols in the callback
  3897.     bindings list will bind that symbol's value in the lexical
  3898.     environment of the callback:
  3899.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  3900.         CALLBACK_REASON -- the reason symbol for the callback
  3901.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  3902.         CALLBACK_DOIT   -- this is always bound to T, but if you
  3903.                    set it to NIL within the body of the
  3904.                    callback code, you can prevent the action
  3905.                    that caused the callback from occuring.
  3906.                    This field is only valid for
  3907.                     :XMN_LOSING_FOCUS_CALLBACK, 
  3908.                     :XMN_MODIFY_VERIFY_CALLBACK, and
  3909.                     :XMN_MOTION_VERIFY_CALLBACKS.
  3910.         CALLBACK_CUR_INSERT -- a FIXNUM, the current position of the
  3911.                        insert cursor. This field is only
  3912.                        valid for:
  3913.                     :XMN_LOSING_FOCUS_CALLBACK, 
  3914.                     :XMN_MODIFY_VERIFY_CALLBACK, and
  3915.                     :XMN_MOTION_VERIFY_CALLBACKS.
  3916.         CALLBACK_NEW_INSERT -- a FIXNUM, the position at which the 
  3917.                        user attempted to position the
  3918.                        insert cursor. This field is only
  3919.                        valid for:
  3920.                     :XMN_LOSING_FOCUS_CALLBACK, 
  3921.                     :XMN_MODIFY_VERIFY_CALLBACK, and
  3922.                     :XMN_MOTION_VERIFY_CALLBACKS.
  3923.         CALLBACK_START_POS  -- a FIXNUM, the starting position of
  3924.                        the text to modify. This field is
  3925.                        only valid for: 
  3926.                     :XMN_LOSING_FOCUS_CALLBACK, and
  3927.                     :XMN_MODIFY_VERIFY_CALLBACK.
  3928.         CALLBACK_END_POS    -- a FIXNUM, the ending position of the 
  3929.                        text to modify. This field is
  3930.                        only valid for: 
  3931.                     :XMN_LOSING_FOCUS_CALLBACK, and
  3932.                     :XMN_MODIFY_VERIFY_CALLBACK.
  3933.         CALLBACK_TEXT        -- A STRING, holds the textual
  3934.                     information that was inserted. This 
  3935.                     field is only valid for 
  3936.                     :XMN_MODIFY_VERIFY_CALLBACK.
  3937.  
  3938. *** XmTextClearSelection() // XmTextFieldClearSelection():
  3939.  
  3940.     (send <text> :CLEAR_SELECTION [<xevent>])
  3941.         --> returns <text>
  3942.  
  3943.     This method clears the primary selection in the Text widget.    
  3944.  
  3945.     The optional <xevent> parameter is an XEVENT object from which
  3946.     the event-time is taken. Most often one would just pass in the
  3947.     value of callback symbol CALLBACK_XEVENT. If the <xevent> argument
  3948.     is missing, then 'CurrentTime' (Motif 1.0) or
  3949.     'XtLastTimestampProcessed()' (Motif 1.1) is used.
  3950.  
  3951. #ifdef MOTIF_1.1
  3952. *** XmTextCopy() // XmTextFieldCopy() [Motif 1.1 only]:
  3953.  
  3954.     (send <text> :COPY [<xevent>])
  3955.         --> Returns T normally; returns NIL if the primary
  3956.         selection is NULL, if the widget doesn't own the primary
  3957.         selection, or if unable to gain ownership of the clipboard
  3958.         selection.
  3959.  
  3960.     This method copies the primary selection to the clipboard.
  3961.  
  3962.     The optional <xevent> parameter is an XEVENT object from which
  3963.     the event-time is taken. Most often one would just pass in the
  3964.     value of callback symbol CALLBACK_XEVENT. If the <xevent> argument
  3965.     is missing, then 'CurrentTime' (Motif 1.0) or
  3966.     'XtLastTimestampProcessed()' (Motif 1.1) is used.
  3967. #endif /* MOTIF_1.1 */
  3968.  
  3969. #ifdef MOTIF_1.1
  3970. *** XmTextCut() // XmTextFieldCut() [Motif 1.1 only]:
  3971.  
  3972.     (send <text> :CUT [<xevent>])
  3973.         --> Returns T normally; returns NIL if the primary selection
  3974.         is NULL, if the widget doesn't own the primary selection, or if
  3975.         unable to gain ownership of the clipboard selection.
  3976.  
  3977.     This method copies the primary selected text to the clipboard and
  3978.     then deletes the primary selected text. Calling this method will
  3979.     also invoke the widget's XmNmodifyVerifyCallback and
  3980.     XmNvalueChangedCallback callbacks.
  3981.  
  3982.     The optional <xevent> parameter is an XEVENT object from which
  3983.     the event-time is taken. Most often one would just pass in the
  3984.     value of callback symbol CALLBACK_XEVENT. If the <xevent> argument
  3985.     is missing, then 'CurrentTime' (Motif 1.0) or
  3986.     'XtLastTimestampProcessed()' (Motif 1.1) is used.
  3987. #endif /* MOTIF_1.1 */
  3988.  
  3989. *** XmTextDisableRedisplay() [MOTIF_1.0] // _XmTextDisableRedisplay() [MOTIF_1.1]
  3990.  
  3991.     (send <text_widget> :DISABLE_REDISPLAY <loses-backingstore-p>)
  3992.         --> returns <text_widget>
  3993.  
  3994.     This method is useful to call before making a series of updates
  3995.     to the text widget's string value. It prevents the changes from
  3996.     being displayed until message :ENABLE_REDISPLAY is received. 
  3997.     <loses-backingstore-p> is a boolean. If true, then the text widget
  3998.     loses backingstore, I guess (couldn't find documentation on this).
  3999.  
  4000.     Note that in Motif 1.1, this function has changed its name to
  4001.     _XmTextDisableRedisplay(), and is not documented as being external
  4002.     because it is missing from Xm/Text.h. Programs that rely on this
  4003.     method may break in the future.
  4004.  
  4005.     Note that this method is defined only on the XM_TEXT_WIDGET_CLASS,
  4006.     it doesn't exist for XM_TEXT_FIELD_WIDGET_CLASS.
  4007.  
  4008. *** XmTextEnableRedisplay() [MOTIF_1.0] // : _XmTextEnableRedisplay() [MOTIF_1.1]:
  4009.  
  4010.     (send <text_widget> :ENABLE_REDISPLAY)
  4011.         --> returns <text_widget>
  4012.  
  4013.     This method allows changes made to the text widget to be displayed
  4014.     after the text widget has received a message :DISABLE_REDISPLAY.
  4015.  
  4016.     Note that in Motif 1.1, this function has changed its name to
  4017.     _XmTextEnableRedisplay(), and is not documented as being external
  4018.     because it is missing from Xm/Text.h. Programs that rely on this
  4019.     method may break in the future.
  4020.  
  4021.     Note that this method is defined only on the XM_TEXT_WIDGET_CLASS,
  4022.     it doesn't exist for XM_TEXT_FIELD_WIDGET_CLASS.
  4023.  
  4024. #ifdef MOTIF_1.1
  4025. *** XmTextGetAddMode() // XmTextFieldGetAddMode() [Motif 1.1 only]:
  4026.  
  4027.     (send <text> :GET_ADD_MODE)
  4028.         --> Returns T if the text widget is in add mode, else NIL.
  4029.  
  4030.     See method :SET_ADD_MODE on <text> for details on add-mode.
  4031. #endif /* MOTIF_1.1 */
  4032.  
  4033. #ifdef MOTIF_1.1
  4034. *** XmTextGetBaseline() // XmTextFieldGetBaseline() [Motif 1.1 only]:
  4035.  
  4036.     (send <text> :GET_BASELINE)
  4037.         --> Returns a FIXNUM value that indicates the x position of
  4038.         the first baseline in the Text widget, relative to the x
  4039.         position of the top of the widget.  The calculation takes
  4040.         into account the margin height, shadow thickness, highlight
  4041.         thickness, and font ascent of the first font in the fontlist.
  4042. #endif /* MOTIF_1.1 */
  4043.  
  4044. #ifdef MOTIF_1.1
  4045. *** XmTextGetCursorPosition() // XmTextFieldGetCursorPosition() [Motif 1.1 only]:
  4046.  
  4047.     (send <text> :GET_CURSOR_POSITION)
  4048.         --> returns a FIXNUM, the position of the insert cursor
  4049.         as an index (0 based) into the text widget's string value.
  4050.  
  4051.     This method seems to be exactly the same as
  4052.     :GET_INSERTION_POSITION. I'm providing it for the sake of
  4053.     completeness, because I cannot possibly know whether this method
  4054.     will take on some special significance in some future version of Motif.
  4055. #endif /* MOTIF_1.1 */
  4056.  
  4057. *** XmTextGetEditable() // XmTextFieldGetEditable():
  4058.  
  4059.     (send <text> :GET_EDITABLE)
  4060.         --> returns T if editable, NIL otherwise. This is the
  4061.         same as the value of resource :XMN_EDITABLE.
  4062.  
  4063. *** XmTextGetInsertionPosition() // XmTextFieldGetInsertionPosition():
  4064.  
  4065.     (send <text> :GET_INSERTION_POSITION)
  4066.         --> returns a FIXNUM, the position of the insert cursor
  4067.         as an index (0 based) into the text widget's string value.
  4068.  
  4069.     This method returns the value of resource :XMN_TEXT_POSITION.
  4070.  
  4071. *** XmTextGetLastPosition() // XmTextFieldGetLastPosition():
  4072.  
  4073.     (send <text> :GET_LAST_POSITION)
  4074.         --> Returns a FIXNUM indicating the position of the last
  4075.             character in the text buffer. This is an integer number
  4076.             of characters from the beginning of the buffer.  The
  4077.             first character position is 0.
  4078.  
  4079.     Note: this method will return an error if you are using Motif 1.0
  4080.     on a non-HPUX system. In Motif 1.0, the function corresponding to
  4081.     this method, XmTextGetLastPosition(), was not documented. On most
  4082.     Motif's it was still externally accessible (i.e. not defined as
  4083.     "static" in Xm/Text.c.). Since the functionality provided by the
  4084.     procedure seemed useful, I decided to interface it, even though it
  4085.     was undocumented. Unfortunately, a few bright vendors with nothing
  4086.     better to do decided to change the OSF/Motif 1.0 source so that the
  4087.     procedure is not accessible (declared the procedure "static")
  4088.     thereby causing compilation problems when porting WINTERP to other
  4089.     vendor's Motif 1.0.
  4090.  
  4091.     I know that the function exists in HP's Motif 1.0, but cannot know
  4092.     whether    other vendors will decide to make gratuitous changes to the
  4093.     Motif source. Therefore, for all Motif 1.0 non-HPUX systems,
  4094.     calling this method will signal an error. If you know your version
  4095.     of Motif 1.0 is    "pure", and you need this functionality, the
  4096.     changes you need to make in ./../src-server/wc_Text.c should be
  4097.     obvious. A better solution would be to use Motif 1.1.
  4098.  
  4099.     For Motif 1.1 this functionality is documented and defined, so
  4100.     don't worry about it.
  4101.  
  4102. *** XmTextGetMaxLength() // XmTextFieldGetMaxLength():
  4103.  
  4104.     (send <text> :GET_MAX_LENGTH)
  4105.         --> returns a FIXNUM, the maximum length of a text string
  4106.         entered into <text> from the keyboard.
  4107.  
  4108. *** XmTextGetSelection() // XmTextFieldGetSelection():
  4109.  
  4110.     (send <text> :GET_SELECTION)
  4111.         --> returns a string, the value of the primary selection;
  4112.         if no text is selected, an empty string is returned.
  4113.  
  4114. *** XmTextGetSelectionPosition() // XmTextFieldGetSelectionPosition():
  4115.  
  4116.     (send <text> :GET_SELECTION_POSITION)
  4117.         --> returns a "dotted pair" (<left_pos> . <right_pos>):
  4118.         Taking 'car' of this result returns <left_pos> which is a FIXNUM
  4119.         representing the position of the left side of the primary
  4120.         selection. Taking 'cdr' of the result returns <right_pos>
  4121.         which is a FIXNUM representing the position if the right side of
  4122.         the selection. Returns NIL if the widget doesn't own the
  4123.         primary selection.
  4124.  
  4125.     Note: this method will return an error if you are using Motif 1.0
  4126.     on a non-HPUX system. In Motif 1.0, the function corresponding to
  4127.     this method, XmTextGetSelectionPosition(), was not documented. On most
  4128.     Motif's it was still externally accessible (i.e. not defined as
  4129.     "static" in Xm/Text.c.). Since the functionality provided by the
  4130.     procedure seemed useful, I decided to interface it, even though it
  4131.     was undocumented. Unfortunately, a few bright vendors with nothing
  4132.     better to do decided to change the OSF/Motif 1.0 source so that the
  4133.     procedure is not accessible (declared the procedure "static")
  4134.     thereby causing compilation problems when porting WINTERP to other
  4135.     vendor's Motif 1.0.
  4136.  
  4137.     I know that the function exists in HP's Motif 1.0, but cannot know
  4138.     whether    other vendors will decide to make gratuitous changes to the
  4139.     Motif source. Therefore, for all Motif 1.0 non-HPUX systems,
  4140.     calling this method will signal an error. If you know your version
  4141.     of Motif 1.0 is    "pure", and you need this functionality, the
  4142.     changes you need to make in ./../src-server/wc_Text.c should be
  4143.     obvious. A better solution would be to use Motif 1.1.
  4144.  
  4145.     For Motif 1.1 this functionality is documented and defined, so
  4146.     don't worry about it.
  4147.  
  4148. *** XmTextGetSource():
  4149.  
  4150.     No interface to this method exists in the current version of WINTERP.
  4151.  
  4152. *** XmTextGetString() // XmTextFieldGetString():
  4153.  
  4154.     (send <text> :GET_STRING)
  4155.         --> returns the string presented/edited in the text edit widget.
  4156.  
  4157. *** XmTextGetTopCharacter():
  4158.  
  4159.     (send <text_widget> :GET_TOP_CHARACTER)
  4160.         ---> returns a FIXNUM representing the number of characters
  4161.         from the beginning of the text buffer occuring before the
  4162.         first character being displayed in <text_widget>.
  4163.  
  4164.     This method returns the value of the :XMN_TOP_CHARACTER resource.
  4165.  
  4166.     Note that this method is defined only on the XM_TEXT_WIDGET_CLASS,
  4167.     it doesn't exist for XM_TEXT_FIELD_WIDGET_CLASS.
  4168.  
  4169.     [Note: the name XmTextGetTopPosition() was changed to
  4170.     XmTextGetTopCharacter() in Motif patch 1.01. People using WINTERP
  4171.     on HPUX 7.0 (which uses the unpatched Motif 1.0) should note
  4172.     this gratuitous name change in Motif.]    
  4173.  
  4174. #ifdef MOTIF_1.1
  4175. *** XmTextInsert() // XmTextFieldInsert() [Motif 1.1 only]:
  4176.  
  4177.     (send <text> :INSERT <position> <value>)
  4178.         --> Returns <text>.
  4179.  
  4180.     This method inserts a character string <value> into the text string
  4181.     in the Text widget.  The string is inserted after the character
  4182.     position specified by the FIXNUM <position>. The first position in
  4183.     the text widget is at zero.
  4184.  
  4185.     This routine also calls the widget's XmNmodifyVerifyCallback and
  4186.     XmNvalueChangedCallback callbacks.
  4187. #endif /* MOTIF_1.1 */
  4188.  
  4189. #ifdef MOTIF_1.1
  4190. *** XmTextPaste() // XmTextFieldPaste() [Motif 1.1 only]:
  4191.  
  4192.     (send <text> :PASTE)
  4193.         --> returns T normally; returns NIL if the primary
  4194.         selection is NULL or if the widget doesn't own the primary
  4195.         selection.
  4196.  
  4197.     This method inserts the clipboard selection at the destination
  4198.     cursor. If resource :XMN_PENDING_DELETE is True and the destination
  4199.     cursor is inside the current selection, the clipboard selection
  4200.     replaces the selected text.  Calling this method also invokes the
  4201.     widget's XmNmodifyVerifyCallback and XmNvalueChangedCallback callbacks.
  4202. #endif /* MOTIF_1.1 */
  4203.  
  4204. *** XmTextPosToXY() // XmTextFieldPosToXY():
  4205.  
  4206.     (send <text> :POS_TO_XY <position>)
  4207.         --> returns a "dotted pair" (<x> . <y>). Taking 'car' of the
  4208.         result returns <x>, a FIXNUM representing the pixel x position
  4209.         corresponding to <position>. 'cdr' of the result returns <y>,
  4210.         a FIXNUM representing the pixel y position corresponding to 
  4211.         <position>. Returns NIL if <position> is not displayed in
  4212.         the widget.
  4213.  
  4214.     The positions returned by this method are relative to the upper
  4215.     left corner of the widget. <position> is a FIXNUM representing the
  4216.     zero-based character index in <text>.
  4217.  
  4218.     Note: this method will return an error if you are using Motif 1.0
  4219.     on a non-HPUX system. In Motif 1.0, the function corresponding to
  4220.     this method, XmTextPosToXY(), was not documented. On most
  4221.     Motif's it was still externally accessible (i.e. not defined as
  4222.     "static" in Xm/Text.c.). Since the functionality provided by the
  4223.     procedure seemed useful, I decided to interface it, even though it
  4224.     was undocumented. Unfortunately, a few bright vendors with nothing
  4225.     better to do decided to change the OSF/Motif 1.0 source so that the
  4226.     procedure is not accessible (declared the procedure "static")
  4227.     thereby causing compilation problems when porting WINTERP to other
  4228.     vendor's Motif 1.0.
  4229.  
  4230.     I know that the function exists in HP's Motif 1.0, but cannot know
  4231.     whether    other vendors will decide to make gratuitous changes to the
  4232.     Motif source. Therefore, for all Motif 1.0 non-HPUX systems,
  4233.     calling this method will signal an error. If you know your version
  4234.     of Motif 1.0 is    "pure", and you need this functionality, the
  4235.     changes you need to make in ./../src-server/wc_Text.c should be
  4236.     obvious. A better solution would be to use Motif 1.1.
  4237.  
  4238.     For Motif 1.1 this functionality is documented and defined, so
  4239.     don't worry about it.
  4240.  
  4241. #ifdef MOTIF_1.1
  4242. *** XmTextRemove() // XmTextFieldRemove() [Motif 1.1 only]:
  4243.  
  4244.     (send <text> :REMOVE)
  4245.         --> Returns T normally; returns NIL if the primary
  4246.         selection is NULL or if the widget doesn't own the primary
  4247.         selection.
  4248.  
  4249.     This method deletes the primary selected text and calls the
  4250.     widget's XmNmodifyVerifyCallback and XmNvalueChangedCallback
  4251.     callbacks if there is a selection.
  4252. #endif /* MOTIF_1.1 */
  4253.  
  4254. *** XmTextReplace() // XmTextFieldReplace():
  4255.  
  4256.     (send <text> :REPLACE <from-pos> <to-pos> <string>)
  4257.         --> returns <text_widget>.
  4258.  
  4259.     This method replaces part of the text string displayed by
  4260.     <text> with <string> a STRING value.
  4261.  
  4262.     <from-pos> and <to-pos> are FIXNUMs which represent the indexes
  4263.     of the character segment to be replaced. If <from-pos>==<to-pos>
  4264.     the <string> is inserted after <from-pos>. The value 0 represents
  4265.     the first position in the text widget.    
  4266.  
  4267.     This method also calls the widget's XmNmodifyVerifyCallback
  4268.     and XmNvalueChangedCallback callbacks.
  4269.  
  4270. *** XmTextScroll():
  4271.  
  4272.     (send <text_widget> :SCROLL <n>)
  4273.         --> returns <text_widget>.
  4274.  
  4275.     This method will scroll the text displayed by the text widget
  4276.     up or down by <n> lines. If <n> is a positive FIXNUM, the text
  4277.     moves upward. If <n> is a negative FIXNUM, the text moves down. 
  4278.  
  4279.     Note that this method is defined only on the XM_TEXT_WIDGET_CLASS,
  4280.     it doesn't exist for XM_TEXT_FIELD_WIDGET_CLASS.
  4281.  
  4282.     Note: this method will return an error if you are using Motif 1.0
  4283.     on a non-HPUX system. In Motif 1.0, the function corresponding to
  4284.     this method, XmTextScroll(), was not documented. On most
  4285.     Motif's it was still externally accessible (i.e. not defined as
  4286.     "static" in Xm/Text.c.). Since the functionality provided by the
  4287.     procedure seemed useful, I decided to interface it, even though it
  4288.     was undocumented. Unfortunately, a few bright vendors with nothing
  4289.     better to do decided to change the OSF/Motif 1.0 source so that the
  4290.     procedure is not accessible (declared the procedure "static")
  4291.     thereby causing compilation problems when porting WINTERP to other
  4292.     vendor's Motif 1.0.
  4293.  
  4294.     I know that the function exists in HP's Motif 1.0, but cannot know
  4295.     whether    other vendors will decide to make gratuitous changes to the
  4296.     Motif source. Therefore, for all Motif 1.0 non-HPUX systems,
  4297.     calling this method will signal an error. If you know your version
  4298.     of Motif 1.0 is    "pure", and you need this functionality, the
  4299.     changes you need to make in ./../src-server/wc_Text.c should be
  4300.     obvious. A better solution would be to use Motif 1.1.
  4301.  
  4302.     For Motif 1.1 this functionality is documented and defined, so
  4303.     don't worry about it.
  4304.  
  4305. #ifdef MOTIF_1.1
  4306. *** XmTextSetAddMode() // XmTextFieldSetAddMode() [Motif 1.1 only]:
  4307.  
  4308.     (send <text> :SET_ADD_MODE <add-modeP>)
  4309.         --> returns <text>
  4310.  
  4311.     This method controls whether or not the Text widget is in Add Mode.
  4312.     When <add-modeP> is T, the widget is set to Add Mode and the
  4313.     insert cursor can be moved without disturbing the primary
  4314.     selection. Else the primary selection is disturbed by cursor movement.
  4315. #endif /* MOTIF_1.1 */
  4316.  
  4317. #ifdef MOTIF_1.1
  4318. *** XmTextSetCursorPosition() // XmTextFieldSetCursorPosition() [Motif 1.1 only]:
  4319.  
  4320.     (send <text> :SET_CURSOR_POSITION <position>)
  4321.         --> returns <text>
  4322.  
  4323.     This method seems to be exactly the same as :SET_INSERTION_POSITION.
  4324.     I'm providing it for the sake of completeness, because I cannot
  4325.     possibly know whether this method will take on some special
  4326.     significance in some future version of Motif.
  4327. #endif /* MOTIF_1.1 */
  4328.  
  4329. *** XmTextSetEditable() // XmTextFieldSetEditable():
  4330.  
  4331.     (send <text> :SET_EDITABLE <editableP>)
  4332.         --> returns <text>
  4333.  
  4334.     This method sets the edit permission of the <text>. If
  4335.     <editableP> is NIL, then keyboard input will not edit text,
  4336.     otherwise users may edit the text. This method sets the resource
  4337.     :XMN_EDITABLE.
  4338.  
  4339. #ifdef MOTIF_1.1
  4340. *** XmTextSetHighlight() // XmTextFieldSetHighlight() [Motif 1.1 only]:
  4341.  
  4342.     (send <text> :SET_HIGHLIGHT <leftpos> <rightpos> <highlightmode>)
  4343.         --> Returns <text>
  4344.  
  4345.     This method highlights text between the two specified character
  4346.     positions <leftpos> and <rightpos>.
  4347.  
  4348.     The <highlightmode> parameter determines the type of highlighting,
  4349.     e.g. :HIGHLIGHT_NORMAL, :HIGHLIGHT_SELECTED, and
  4350.     :HIGHLIGHT_SECONDARY_SELECTED.
  4351.  
  4352.     Note that highlighting text merely changes the visual appearance of
  4353.     the text; it does not set the selection.
  4354. #endif /* MOTIF_1.1 */
  4355.  
  4356. *** XmTextSetInsertionPosition() // XmTextFieldSetInsertionPosition():
  4357.  
  4358.     (send <text> :SET_INSERTION_POSITION <position>)
  4359.         --> returns <text>
  4360.  
  4361.     This method sets the insertion cursor position of the Text widget
  4362.     to index <position>, a FIXNUM. This routine also calls the widget's
  4363.     XmNmotionVerifyCallback callbacks if the insertion cursor position
  4364.     changes.
  4365.  
  4366. *** XmTextSetMaxLength() // XmTextFieldSetMaxLength():
  4367.  
  4368.     (send <text> :SET_MAX_LENGTH <max_length>)
  4369.         --> returns <text>
  4370.  
  4371.     This method sets the value of the current maximum allowable length
  4372.     of a text string entered from the keyboard to <max_length>, a FIXNUM.
  4373.  
  4374.     The maximum allowable length prevents the user from entering a
  4375.     text string from the keyboard that is larger than this limit.
  4376.     Strings that are entered using the :XMN_STRING resource or the
  4377.     :SET_STRING method ignore this resource.
  4378.  
  4379. *** XmTextSetSelection() // XmTextFieldSetSelection():
  4380.  
  4381.     (send <text> :SET_SELECTION <firstpos> <lastpos> [<xevent>])
  4382.         --> returns <text>.
  4383.  
  4384.     This method sets the primary selection in <text>. The selection
  4385.     is set between indexes <firstpos> and <lastpos>, both FIXNUMs. Calling
  4386.     this method will also set the insertion cursor position to <lastpos>
  4387.     and call the XmNmotionVerifyCallback callbacks.
  4388.  
  4389.     The optional <xevent> parameter is an XEVENT object from which
  4390.     the event-time is taken. Most often one would just pass in the
  4391.     value of callback symbol CALLBACK_XEVENT. If the <xevent> argument
  4392.     is missing, then 'CurrentTime' (Motif 1.0) or
  4393.     'XtLastTimestampProcessed()' (Motif 1.1) is used.
  4394.  
  4395. *** XmTextSetSource():
  4396.  
  4397.     No interface to this method exists in the current version of WINTERP.
  4398.  
  4399. *** XmTextSetString() // XmTextFieldSetString():
  4400.  
  4401.     (send <text> :SET_STRING <string>)
  4402.         --> returns <text_widget>
  4403.  
  4404.     This method sets the string value of the Text widget. This routine
  4405.     calls the widget's XmNmodifyVerifyCallback and XmNvalueChangedCallback
  4406.     callbacks.  It also sets the insertion cursor position to the beginning
  4407.     of the string and calls the widget's XmNmotionVerifyCallback callbacks.
  4408.  
  4409. *** XmTextSetTopCharacter():
  4410.  
  4411.     (send <text_widget> :SET_TOP_CHARACTER <top_position>)
  4412.         --> returns <text_widget>.
  4413.     
  4414.     This method sets the first character to be displayed by 
  4415.     <text_widget> to be the character whose index is the FIXNUM
  4416.     <top_position>. If resource :XMN_EDIT_MODE is set to :MULTI_LINE_EDIT,
  4417.     then the line of text that contains <top_position> is displayed at the
  4418.     top of the widget without shifting the text left or right.
  4419.  
  4420.     Note that this method is defined only on the XM_TEXT_WIDGET_CLASS,
  4421.     it doesn't exist for XM_TEXT_FIELD_WIDGET_CLASS.
  4422.  
  4423.     [Note: the name XmTextSetTopPosition() was changed to
  4424.     XmTextSetTopCharacter() in Motif patch 1.01. People using WINTERP
  4425.     on HPUX 7.0 (which includes the unpatched Motif 1.0) should note
  4426.     this gratuitous name change in Motif.]    
  4427.  
  4428. *** XmTextShowPosition() // XmTextFieldShowPosition():
  4429.  
  4430.     (send <text> :SHOW_POSITION <position>)
  4431.         --> returns <text_widget>
  4432.  
  4433.     This method forces the text at the specified FIXNUM index <position>
  4434.     to be displayed. If the resource :XMN_AUTO_SHOW_CURSOR_POSITION is
  4435.     set to 'T', the insert cursor is also set to <position>.
  4436.  
  4437. *** XmTextXYToPos() // XmTextFieldXYToPos():
  4438.  
  4439.     (send <text> :XY_TO_POS <x> <y>)
  4440.         --> returns a FIXNUM representing the character position
  4441.         nearest to the specified FIXNUM positions <x> and <y>.
  4442.         These positions are pixel coordinates relative to the upper
  4443.         left corner of the text widget.
  4444.  
  4445.     Note: this method will return an error if you are using Motif 1.0
  4446.     on a non-HPUX system. In Motif 1.0, the function corresponding to
  4447.     this method, XmTextXYToPos(), was not documented. On most
  4448.     Motif's it was still externally accessible (i.e. not defined as
  4449.     "static" in Xm/Text.c.). Since the functionality provided by the
  4450.     procedure seemed useful, I decided to interface it, even though it
  4451.     was undocumented. Unfortunately, a few bright vendors with nothing
  4452.     better to do decided to change the OSF/Motif 1.0 source so that the
  4453.     procedure is not accessible (declared the procedure "static")
  4454.     thereby causing compilation problems when porting WINTERP to other
  4455.     vendor's Motif 1.0.
  4456.  
  4457.     I know that the function exists in HP's Motif 1.0, but cannot know
  4458.     whether    other vendors will decide to make gratuitous changes to the
  4459.     Motif source. Therefore, for all Motif 1.0 non-HPUX systems,
  4460.     calling this method will signal an error. If you know your version
  4461.     of Motif 1.0 is    "pure", and you need this functionality, the
  4462.     changes you need to make in ./../src-server/wc_Text.c should be
  4463.     obvious. A better solution would be to use Motif 1.1.
  4464.  
  4465.     For Motif 1.1 this functionality is documented and defined, so
  4466.     don't worry about it.
  4467. ______________________________________________________________________________
  4468.  
  4469. ** XM_TOGGLE_BUTTON_WIDGET_CLASS / XM_TOGGLE_BUTTON_GADGET_CLASS
  4470.  
  4471. *** equivalent Xt 'WidgetClass':
  4472.  
  4473.     xmToggleButtonWidgetClass
  4474.     xmToggleButtonGadgetClass
  4475.  
  4476. *** equivalent creation convenience function:
  4477.  
  4478.     (send XM_TOGGLE_BUTTON_WIDGET_CLASS :new [:managed/:unmanaged] ...)
  4479.         --> XmCreateToggleButton()
  4480.  
  4481.     (send XM_TOGGLE_BUTTON_GADGET_CLASS :new [:managed/:unmanaged] ...)
  4482.         --> XmCreateToggleButtonGadget()
  4483.  
  4484. *** XtAddCallback():
  4485.  
  4486.     (send <togglebutton> :ADD_CALLBACK ...)
  4487.         --> returns: <callback_id_object> of type CALLBACKOBJ
  4488.     (send <togglebutton> :SET_CALLBACK ...)
  4489.         --> returns: <callback_id_object> of type CALLBACKOBJ
  4490.  
  4491.     These methods work just like the :ADD_CALLBACK/:SET_CALLBACK
  4492.     methods on WIDGET_CLASS except that these methods understand
  4493.     how to get call_data values from the XmToggleButtonCallbackStruct:
  4494.         typedef struct
  4495.         {
  4496.            int reason;
  4497.            XEvent * event;
  4498.            int set;
  4499.         } XmToggleButtonCallbackStruct;
  4500.  
  4501.     Specifying one or more of the following symbols in the callback
  4502.     bindings list will bind that symbol's value in the lexical
  4503.     environment of the callback:
  4504.         CALLBACK_WIDGET -- the WIDGETOBJ of the callback
  4505.         CALLBACK_REASON -- the reason symbol for the callback
  4506.         CALLBACK_XEVENT -- the Xevent* that caused the callback
  4507.         CALLBACK_SET    -- T if the togglebutton causing the
  4508.                    callback is set, else NIL.
  4509.  
  4510. *** XmToggleButtonGetState() / XmToggleButtonGadgetGetState():
  4511.  
  4512.     (send <togglebutton> :GET_STATE)
  4513.         --> returns T if the toggle button is set, else NIL
  4514.  
  4515. *** XmToggleButtonSetState() / XmToggleButtonGadgetSetState():
  4516.  
  4517.     (send <togglebutton> :SET_STATE <state_p> <notify_p>)
  4518.         --> returns <togglebutton>.
  4519.  
  4520.     This method sets the state of the togglebutton to OFF if
  4521.     boolean <state_p> is NIL, else it set the state to ON
  4522.  
  4523.     <notify_p> -- if not NIL, :xmn_value_changed_callback gets called.
  4524.  
  4525. =============================================================================
  4526.  
  4527. * WINTERP <--> Motif resources
  4528.  
  4529. ______________________________________________________________________________
  4530.  
  4531. ** XmRAcceleratorTable:
  4532.  
  4533. *** Type Information:
  4534.  
  4535.     Resource representation type XmRAcceleratorTable corresponds to the
  4536.     atomic type XT_ACCELERATORS as returned by primitive
  4537.     XT_PARSE_ACCELERATOR_TABLE.
  4538.  
  4539.     One may set XmRAcceleratorTable resources by specifying a STRING
  4540.     accelerator table, just as you would in file $HOME/.Xdefaults.
  4541.     Alternatively, one can use the result of :get_values on another
  4542.     widget's XmRAcceleratorTable resource or use primitive
  4543.     XT_PARSE_ACCELERATOR_TABLE as a XmRAcceleratorTable value.
  4544.  
  4545.     For more information on the syntax of the string representation of
  4546.     accelerator tables, see the X11 documentation "X Toolkit
  4547.     Intrinsics -- C Language Interface": "Appendix B: Translation Table
  4548.     Syntax" and "Chapter 10: Translation Management".
  4549.  
  4550. *** Resource names and the widget classes they apply to:
  4551.  
  4552.     :XMN_TEXT_ACCELERATORS        XmNtextAccelerators
  4553.  
  4554.         XM_SELECTION_BOX_WIDGET_CLASS
  4555.  
  4556.     :XMN_ACCELERATORS        XmNaccelerators
  4557.  
  4558.         <WIDGET_CLASS>
  4559.    #ifdef MOTIF_1.1
  4560.         XM_BULLETIN_BOARD_WIDGET_CLASS
  4561.    #endif
  4562.  
  4563. ______________________________________________________________________________
  4564.  
  4565. ** XmRAlignment:
  4566.  
  4567. *** Type Information:
  4568.  
  4569.     Resource representation type XmRAlignment corresponds to an
  4570.     enumerated type. The following keyword symbols represent the valid
  4571.     WINTERP-Lisp values for this type and their associated Motif constants:
  4572.  
  4573.         :ALIGNMENT_BEGINNING    XmALIGNMENT_BEGINNING
  4574.         :ALIGNMENT_CENTER    XmALIGNMENT_CENTER
  4575.         :ALIGNMENT_END        XmALIGNMENT_END
  4576.  
  4577.     You may also specify a STRING value which will be automatically
  4578.     converted to XmRAlignment by Motif's resource converters.
  4579.     These values would be the same as one would specify in $HOME/.Xdefaults.
  4580.  
  4581.  
  4582. *** Resource names and the widget classes they apply to:
  4583.  
  4584.     :XMN_ALIGNMENT        XmNalignment
  4585.  
  4586.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  4587.  
  4588.     :XMN_MESSAGE_ALIGNMENT    XmNmessageAlignment
  4589.  
  4590.         XM_MESSAGE_BOX_WIDGET_CLASS
  4591.  
  4592.     :XMN_ENTRY_ALIGNMENT    XmNentryAlignment
  4593.  
  4594.         XM_ROW_COLUMN_WIDGET_CLASS
  4595.  
  4596. ______________________________________________________________________________
  4597.  
  4598. ** XmRArrowDirection:
  4599.  
  4600. *** Type Information:
  4601.  
  4602.     Resource representation type XmRArrowDirection corresponds to an
  4603.     enumerated type. The following keyword symbols represent the valid
  4604.     WINTERP-Lisp values for this type and their associated Motif constants:
  4605.  
  4606.         :ARROW_UP        XmARROW_UP
  4607.         :ARROW_DOWN        XmARROW_DOWN
  4608.         :ARROW_LEFT        XmARROW_LEFT
  4609.         :ARROW_RIGHT        XmARROW_RIGHT
  4610.  
  4611.     You may also specify a STRING value which will be automatically
  4612.     converted to XmRArrowDirection by Motif's resource converters.
  4613.     These values would be the same as one would specify in $HOME/.Xdefaults.
  4614.  
  4615.  
  4616. *** Resource names and the widget classes they apply to:
  4617.  
  4618.     :XMN_ARROW_DIRECTION        XmNarrowDirection
  4619.  
  4620.         XM_ARROW_BUTTON_WIDGET_CLASS XM_ARROW_BUTTON_GADGET_CLASS
  4621.  
  4622. ______________________________________________________________________________
  4623.  
  4624. ** XmRAttachment:
  4625.  
  4626. *** Type Information:
  4627.  
  4628.     Resource representation type XmRAttachment corresponds to an
  4629.     enumerated type. The following keyword symbols represent the valid
  4630.     WINTERP-Lisp values for this type and their associated Motif constants:
  4631.  
  4632.         :ATTACH_NONE        XmATTACH_NONE
  4633.         :ATTACH_FORM        XmATTACH_FORM
  4634.         :ATTACH_OPPOSITE_FORM    XmATTACH_OPPOSITE_FORM
  4635.         :ATTACH_WIDGET        XmATTACH_WIDGET
  4636.         :ATTACH_OPPOSITE_WIDGET    XmATTACH_OPPOSITE_WIDGET
  4637.         :ATTACH_POSITION    XmATTACH_POSITION
  4638.         :ATTACH_SELF        XmATTACH_SELF
  4639.  
  4640.     You may also specify a STRING value which will be automatically
  4641.     converted to XmRAttachment by Motif's resource converters.
  4642.     These values would be the same as one would specify in $HOME/.Xdefaults.
  4643.  
  4644.  
  4645. *** Resource names and the widget classes they apply to:
  4646.  
  4647.     :XMN_TOP_ATTACHMENT        XmNtopAttachment
  4648.  
  4649.         XM_FORM_WIDGET_CLASS
  4650.  
  4651.     :XMN_BOTTOM_ATTACHMENT        XmNbottomAttachment
  4652.  
  4653.         XM_FORM_WIDGET_CLASS
  4654.  
  4655.     :XMN_LEFT_ATTACHMENT        XmNleftAttachment
  4656.  
  4657.         XM_FORM_WIDGET_CLASS
  4658.  
  4659.     :XMN_RIGHT_ATTACHMENT        XmNrightAttachment
  4660.  
  4661.         XM_FORM_WIDGET_CLASS
  4662.  
  4663. ______________________________________________________________________________
  4664.  
  4665. ** XmRBoolean:
  4666.  
  4667. *** Type Information:
  4668.  
  4669.     Resource representation type XmRBoolean corresponds to any WINTERP-Lisp 
  4670.     value. If the value is NIL, then the value is the boolean FALSE,
  4671.     any other value is interpreted as boolean TRUE.
  4672.  
  4673.     You may also specify a STRING value which will be automatically
  4674.     converted to XmRBoolean by Motif's resource converters.
  4675.     These values would be the same as one would specify in $HOME/.Xdefaults.
  4676.  
  4677. *** Resource names and the widget classes they apply to:
  4678.  
  4679.     :XMN_ANCESTOR_SENSITIVE        XmNancestorSensitive
  4680.  
  4681.         <WIDGET_CLASS> <SHELL_WIDGET_CLASS>
  4682.  
  4683.     :XMN_INPUT            XmNinput
  4684.  
  4685.         <SHELL_WIDGET_CLASS>
  4686.  
  4687.     :XMN_SENSITIVE            XmNsensitive
  4688.  
  4689.         <WIDGET_CLASS>
  4690.  
  4691.     :XMN_ALLOW_SHELL_RESIZE        XmNallowShellResize
  4692.    #ifdef MOTIF_1.0
  4693.         <SHELL_WIDGET_CLASS> XM_MENU_POPUP_SHELL_WIDGET_CLASS
  4694.    #endif
  4695.    #ifdef MOTIF_1.1
  4696.         <SHELL_WIDGET_CLASS> 
  4697.    #endif
  4698.  
  4699.     :XMN_SAVE_UNDER            XmNsaveUnder
  4700.    #ifdef MOTIF_1.0
  4701.         <SHELL_WIDGET_CLASS> XM_MENU_POPUP_SHELL_WIDGET_CLASS
  4702.    #endif
  4703.    #ifdef MOTIF_1.1
  4704.         <SHELL_WIDGET_CLASS>
  4705.    #endif
  4706.  
  4707.     :XMN_OVERRIDE_REDIRECT        XmNoverrideRedirect
  4708.  
  4709.         <SHELL_WIDGET_CLASS>
  4710.  
  4711.     :XMN_WAIT_FOR_WM        XmNwaitForWm
  4712.  
  4713.         <SHELL_WIDGET_CLASS>
  4714.  
  4715.     :XMN_TRANSIENT            XmNtransient
  4716.  
  4717.         <SHELL_WIDGET_CLASS>
  4718.  
  4719.     :XMN_ICONIC            XmNiconic
  4720.  
  4721.         <SHELL_WIDGET_CLASS>
  4722.  
  4723.     :XMN_MAPPED_WHEN_MANAGED    XmNmappedWhenManaged
  4724.  
  4725.         <WIDGET_CLASS>
  4726.  
  4727.     :XMN_ALLOW_OVERLAP        XmNallowOverlap
  4728.  
  4729.         XM_BULLETIN_BOARD_WIDGET_CLASS
  4730.  
  4731.     :XMN_AUTO_UNMANAGE        XmNautoUnmanage
  4732.  
  4733.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_COMMAND_WIDGET_CLASS
  4734.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  4735.  
  4736.     :XMN_DEFAULT_POSITION        XmNdefaultPosition
  4737.  
  4738.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_COMMAND_WIDGET_CLASS
  4739.  
  4740.     :XMN_NO_RESIZE            XmNnoResize
  4741.  
  4742.         XM_BULLETIN_BOARD_WIDGET_CLASS
  4743.  
  4744.     :XMN_PUSH_BUTTON_ENABLED    XmNpushButtonEnabled
  4745.  
  4746.         XM_DRAWN_BUTTON_WIDGET_CLASS
  4747.  
  4748.     :XMN_LIST_UPDATED        XmNlistUpdated
  4749.  
  4750.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  4751.  
  4752.     :XMN_RUBBER_POSITIONING        XmNrubberPositioning
  4753.  
  4754.         XM_FORM_WIDGET_CLASS
  4755.  
  4756.     :XMN_RESIZABLE            XmNresizable
  4757.  
  4758.         XM_FORM_WIDGET_CLASS
  4759.  
  4760.     :XMN_TRAVERSAL_ON        XmNtraversalOn
  4761.  
  4762.    #ifdef MOTIF_1.0
  4763.         <XM_GADGET_CLASS> <XM_PRIMITIVE_WIDGET_CLASS>
  4764.         XM_SCALE_WIDGET_CLASS
  4765.    #end
  4766.    #ifdef MOTIF1.1
  4767.         XM_CASCADE_BUTTON_WIDGET_CLASS XM_CASCADE_BUTTON_GADGET_CLASS
  4768.         XM_DRAWN_BUTTON_WIDGET_CLASS <XM_GADGET_CLASS> 
  4769.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  4770.         <XM_MANAGER_WIDGET_CLASS> <XM_PRIMITIVE_WIDGET_CLASS>
  4771.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  4772.         XM_SCROLL_BAR_WIDGET_CLASS XM_SEPARATOR_GADGET_CLASS
  4773.         XM_SEPARATOR_WIDGET_CLASS XM_TOGGLE_BUTTON_WIDGET_CLASS
  4774.         XM_TOGGLE_BUTTON_GADGET_CLASS 
  4775.    #else
  4776.  
  4777.     :XMN_HIGHLIGHT_ON_ENTER        XmNhighlightOnEnter
  4778.  
  4779.         <XM_GADGET_CLASS> <XM_PRIMITIVE_WIDGET_CLASS>
  4780.         XM_SCALE_WIDGET_CLASS
  4781.  
  4782.     :XMN_RECOMPUTE_SIZE        XmNrecomputeSize
  4783.  
  4784.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  4785.  
  4786.     :XMN_AUTOMATIC_SELECTION XmNautomaticSelection
  4787.  
  4788.         XM_LIST_WIDGET_CLASS
  4789.  
  4790.     :XMN_SHOW_SEPARATOR        XmNshowSeparator
  4791.  
  4792.         XM_MAIN_WINDOW_WIDGET_CLASS
  4793.  
  4794.     :XMN_MINIMIZE_BUTTONS        XmNminimizeButtons
  4795.  
  4796.         XM_MESSAGE_BOX_WIDGET_CLASS XM_SELECTION_BOX_WIDGET_CLASS
  4797.  
  4798.     :XMN_REFIGURE_MODE        XmNrefigureMode
  4799.  
  4800.         XM_PANED_WINDOW_WIDGET_CLASS
  4801.  
  4802.     :XMN_SEPARATOR_ON        XmNseparatorOn
  4803.  
  4804.         XM_PANED_WINDOW_WIDGET_CLASS
  4805.  
  4806.     :XMN_ALLOW_RESIZE        XmNallowResize
  4807.  
  4808.         XM_PANED_WINDOW_WIDGET_CLASS
  4809.  
  4810.     :XMN_SKIP_ADJUST        XmNskipAdjust
  4811.  
  4812.         XM_PANED_WINDOW_WIDGET_CLASS
  4813.  
  4814.     :XMN_FILL_ON_ARM        XmNfillOnArm
  4815.  
  4816.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  4817.  
  4818.     :XMN_RESIZE_WIDTH        XmNresizeWidth
  4819.  
  4820.         XM_ROW_COLUMN_WIDGET_CLASS XM_TEXT_WIDGET_CLASS
  4821.         XM_TEXT_FIELD_WIDGET_CLASS
  4822.  
  4823.     :XMN_RESIZE_HEIGHT        XmNresizeHeight
  4824.  
  4825.         XM_ROW_COLUMN_WIDGET_CLASS XM_TEXT_WIDGET_CLASS
  4826.  
  4827.     :XMN_ADJUST_LAST        XmNadjustLast
  4828.  
  4829.         XM_ROW_COLUMN_WIDGET_CLASS
  4830.  
  4831.     :XMN_IS_ALIGNED            XmNisAligned
  4832.  
  4833.         XM_ROW_COLUMN_WIDGET_CLASS
  4834.  
  4835.     :XMN_ADJUST_MARGIN        XmNadjustMargin
  4836.  
  4837.         XM_ROW_COLUMN_WIDGET_CLASS
  4838.  
  4839.     :XMN_RADIO_BEHAVIOR        XmNradioBehavior
  4840.  
  4841.         XM_ROW_COLUMN_WIDGET_CLASS
  4842.  
  4843.     :XMN_RADIO_ALWAYS_ONE        XmNradioAlwaysOne
  4844.  
  4845.         XM_ROW_COLUMN_WIDGET_CLASS
  4846.  
  4847.     :XMN_IS_HOMOGENEOUS        XmNisHomogeneous
  4848.  
  4849.         XM_ROW_COLUMN_WIDGET_CLASS
  4850.  
  4851.     :XMN_POPUP_ENABLED        XmNpopupEnabled
  4852.  
  4853.         XM_ROW_COLUMN_WIDGET_CLASS
  4854.  
  4855.     :XMN_SHOW_VALUE            XmNshowValue
  4856.  
  4857.         XM_SCALE_WIDGET_CLASS
  4858.  
  4859.     :XMN_SHOW_ARROWS        XmNshowArrows
  4860.  
  4861.         XM_SCROLL_BAR_WIDGET_CLASS
  4862.  
  4863.     :XMN_MUST_MATCH            XmNmustMatch
  4864.  
  4865.         XM_SELECTION_BOX_WIDGET_CLASS
  4866.  
  4867.     :XMN_AUTO_SHOW_CURSOR_POSITION    XmNautoShowCursorPosition
  4868.  
  4869.         XM_TEXT_WIDGET_CLASS
  4870.  
  4871.     :XMN_EDITABLE            XmNeditable
  4872.  
  4873.         XM_TEXT_WIDGET_CLASS XM_TEXT_FIELD_WIDGET_CLASS
  4874.  
  4875.     :XMN_PENDING_DELETE        XmNpendingDelete
  4876.  
  4877.         XM_TEXT_WIDGET_CLASS    XM_TEXT_FIELD_WIDGET_CLASS
  4878.  
  4879.     :XMN_WORD_WRAP            XmNwordWrap
  4880.  
  4881.         XM_TEXT_WIDGET_CLASS
  4882.  
  4883.     :XMN_SCROLL_VERTICAL        XmNscrollVertical
  4884.  
  4885.         XM_TEXT_WIDGET_CLASS
  4886.  
  4887.     :XMN_SCROLL_HORIZONTAL        XmNscrollHorizontal
  4888.  
  4889.         XM_TEXT_WIDGET_CLASS
  4890.  
  4891.     :XMN_SCROLL_LEFT_SIDE        XmNscrollLeftSide
  4892.  
  4893.         XM_TEXT_WIDGET_CLASS
  4894.  
  4895.     :XMN_SCROLL_TOP_SIDE        XmNscrollTopSide
  4896.  
  4897.         XM_TEXT_WIDGET_CLASS
  4898.  
  4899.     :XMN_CURSOR_POSITION_VISIBLE    XmNcursorPositionVisible
  4900.  
  4901.         XM_TEXT_WIDGET_CLASS    XM_TEXT_FIELD_WIDGET_CLASS
  4902.  
  4903.     :XMN_VISIBLE_WHEN_OFF        XmNvisibleWhenOff
  4904.  
  4905.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  4906.  
  4907.     :XMN_SET            XmNset    
  4908.  
  4909.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  4910.  
  4911.     :XMN_INDICATOR_ON        XmNindicatorOn
  4912.  
  4913.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  4914.  
  4915.     :XMN_FILL_ON_SELECT        XmNfillOnSelect
  4916.  
  4917.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  4918.  
  4919.    #ifdef MOTIF_1.1
  4920.  
  4921.     :XMN_DIRECTORY_VALID        XmNdirectoryValid
  4922.  
  4923.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  4924.  
  4925.     :XMN_VERIFY_BELL        XmNverifyBell
  4926.  
  4927.         XM_TEXT_WIDGET_CLASS XM_TEXT_FIELD_WIDGET_CLASS
  4928.  
  4929.     :XMN_USE_ASYNC_GEOMETRY        XmNuseAsyncGeometry
  4930.  
  4931.         <SHELL_WIDGET_CLASS>
  4932.  
  4933.     :XMN_SHOW_AS_DEFAULT        XmNshowAsDefault
  4934.  
  4935.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  4936.  
  4937.     :XMN_INITIAL_RESOURCES_PERSISTENT XmNinitialResourcesPersistent
  4938.         <WIDGET_CLASS>
  4939.  
  4940.    #endif /* MOTIF_1.1 */
  4941.  
  4942. ______________________________________________________________________________
  4943.  
  4944. #ifdef MOTIF_1.1
  4945. ** XmRButtonType [MOTIF_1.1 only]
  4946.  
  4947. *** Type Information:
  4948.  
  4949.     One may set an XmRButtonType resource by passing a ARRAY or LIST value
  4950.     containing the following button-type keyword symbols:
  4951.     :PUSHBUTTON, :TOGGLEBUTTON, :CHECKBUTTON, :RADIOBUTTON, :CASCADEBUTTON
  4952.     :SEPARATOR, :DOUBLE_SEPARATOR, :TITLE.
  4953.  
  4954.     XmRButtonType is a create-time-only resource. It cannot be
  4955.     retrieved via :GET_VALUES.
  4956.  
  4957. *** Resource names and the widget classes they apply to:
  4958.  
  4959.     :XMN_BUTTON_TYPE        XmNbuttonType
  4960.  
  4961.         XM_ROW_COLUMN_WIDGET_CLASS
  4962.         (for XmCreateSimple*() routines only).
  4963.  
  4964. #endif /* MOTIF_1.1 */
  4965.  
  4966. ______________________________________________________________________________
  4967.  
  4968. ** XmRCallback:
  4969.  
  4970. *** Type Information:
  4971.  
  4972.     The current version of WINTERP does not allow you to set or
  4973.     retrieve a widget's callback list directly. Modifications
  4974.     to a callback list must be done through WIDGET_CLASS methods
  4975.     :ADD_CALLBACK, :SET_CALLBACK, :REMOVE_ALL_CALLBACKS,
  4976.     or via primitive XT_REMOVE_CALLBACK.
  4977.  
  4978.  
  4979. *** Resource names and the widget classes they apply to:
  4980.  
  4981.     :XMN_DESTROY_CALLBACK        XmNdestroyCallback
  4982.  
  4983.         <WIDGET_CLASS>
  4984.  
  4985.     :XMN_POPUP_CALLBACK        XmNpopupCallback
  4986.  
  4987.         <SHELL_WIDGET_CLASS>
  4988.  
  4989.     :XMN_POPDOWN_CALLBACK        XmNpopdownCallback
  4990.  
  4991.         <SHELL_WIDGET_CLASS>
  4992.  
  4993.     :XMN_ACTIVATE_CALLBACK        XmNactivateCallback
  4994.  
  4995.         XM_ARROW_BUTTON_WIDGET_CLASS XM_ARROW_BUTTON_GADGET_CLASS
  4996.         XM_CASCADE_BUTTON_WIDGET_CLASS XM_CASCADE_BUTTON_GADGET_CLASS
  4997.         XM_DRAWN_BUTTON_WIDGET_CLASS
  4998.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  4999.         XM_TEXT_WIDGET_CLASS
  5000.        #ifdef MOTIF_1.1
  5001.         XM_TEXT_FIELD_WIDGET_CLASS
  5002.        #endif
  5003.  
  5004.     :XMN_ARM_CALLBACK        XmNarmCallback
  5005.  
  5006.         XM_ARROW_BUTTON_WIDGET_CLASS XM_ARROW_BUTTON_GADGET_CLASS
  5007.         XM_DRAWN_BUTTON_WIDGET_CLASS
  5008.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  5009.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  5010.  
  5011.     :XMN_DISARM_CALLBACK        XmNdisarmCallback
  5012.  
  5013.         XM_ARROW_BUTTON_WIDGET_CLASS XM_ARROW_BUTTON_GADGET_CLASS
  5014.         XM_DRAWN_BUTTON_WIDGET_CLASS
  5015.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  5016.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  5017.  
  5018.     :XMN_FOCUS_CALLBACK        XmNfocusCallback
  5019.  
  5020.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_TEXT_WIDGET_CLASS
  5021.  
  5022.     :XMN_MAP_CALLBACK        XmNmapCallback
  5023.  
  5024.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_ROW_COLUMN_WIDGET_CLASS
  5025.  
  5026.     :XMN_UNMAP_CALLBACK        XmNunmapCallback
  5027.  
  5028.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_ROW_COLUMN_WIDGET_CLASS
  5029.  
  5030.     :XMN_CASCADING_CALLBACK        XmNcascadingCallback
  5031.  
  5032.         XM_CASCADE_BUTTON_WIDGET_CLASS XM_CASCADE_BUTTON_GADGET_CLASS
  5033.  
  5034.     :XMN_COMMAND_ENTERED_CALLBACK    XmNcommandEnteredCallback
  5035.  
  5036.         XM_COMMAND_WIDGET_CLASS
  5037.  
  5038.     :XMN_COMMAND_CHANGED_CALLBACK    XmNcommandChangedCallback
  5039.  
  5040.         XM_COMMAND_WIDGET_CLASS
  5041.  
  5042.     :XMN_RESIZE_CALLBACK        XmNresizeCallback
  5043.  
  5044.         XM_DRAWING_AREA_WIDGET_CLASS XM_DRAWN_BUTTON_WIDGET_CLASS
  5045.  
  5046.     :XMN_EXPOSE_CALLBACK        XmNexposeCallback
  5047.  
  5048.         XM_DRAWING_AREA_WIDGET_CLASS XM_DRAWN_BUTTON_WIDGET_CLASS
  5049.  
  5050.     :XMN_INPUT_CALLBACK        XmNinputCallback
  5051.  
  5052.         XM_DRAWING_AREA_WIDGET_CLASS
  5053.  
  5054.     :XMN_HELP_CALLBACK        XmNhelpCallback
  5055.  
  5056.         <XM_GADGET_CLASS> <XM_MANAGER_WIDGET_CLASS>
  5057.         <XM_PRIMITIVE_WIDGET_CLASS>
  5058.  
  5059.     :XMN_SINGLE_SELECTION_CALLBACK    XmNsingleSelectionCallback
  5060.  
  5061.         XM_LIST_WIDGET_CLASS
  5062.  
  5063.     :XMN_MULTIPLE_SELECTION_CALLBACK XmNmultipleSelectionCallback
  5064.  
  5065.         XM_LIST_WIDGET_CLASS
  5066.  
  5067.     :XMN_EXTENDED_SELECTION_CALLBACK XmNextendedSelectionCallback
  5068.  
  5069.         XM_LIST_WIDGET_CLASS
  5070.  
  5071.     :XMN_BROWSE_SELECTION_CALLBACK    XmNbrowseSelectionCallback
  5072.  
  5073.         XM_LIST_WIDGET_CLASS
  5074.  
  5075.     :XMN_DEFAULT_ACTION_CALLBACK    XmNdefaultActionCallback
  5076.  
  5077.         XM_LIST_WIDGET_CLASS 
  5078.  
  5079.     :XMN_OK_CALLBACK        XmNokCallback
  5080.  
  5081.         XM_MESSAGE_BOX_WIDGET_CLASS XM_SELECTION_BOX_WIDGET_CLASS
  5082.  
  5083.     :XMN_CANCEL_CALLBACK        XmNcancelCallback
  5084.  
  5085.         XM_MESSAGE_BOX_WIDGET_CLASS XM_SELECTION_BOX_WIDGET_CLASS
  5086.  
  5087.     :XMN_ENTRY_CALLBACK        XmNentryCallback
  5088.  
  5089.         XM_ROW_COLUMN_WIDGET_CLASS
  5090.  
  5091.     :XMN_VALUE_CHANGED_CALLBACK    XmNvalueChangedCallback
  5092.  
  5093.         XM_SCALE_WIDGET_CLASS XM_SCROLL_BAR_WIDGET_CLASS
  5094.         XM_TEXT_WIDGET_CLASS
  5095.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  5096.        #ifdef MOTIF_1.1
  5097.         XM_TEXT_FIELD_WIDGET_CLASS
  5098.        #endif
  5099.  
  5100.     :XMN_DRAG_CALLBACK        XmNdragCallback
  5101.  
  5102.         XM_SCALE_WIDGET_CLASS XM_SCROLL_BAR_WIDGET_CLASS
  5103.  
  5104.     :XMN_INCREMENT_CALLBACK        XmNincrementCallback
  5105.  
  5106.         XM_SCROLL_BAR_WIDGET_CLASS
  5107.  
  5108.     :XMN_DECREMENT_CALLBACK        XmNdecrementCallback
  5109.  
  5110.         XM_SCROLL_BAR_WIDGET_CLASS
  5111.  
  5112.     :XMN_PAGE_INCREMENT_CALLBACK    XmNpageIncrementCallback
  5113.  
  5114.         XM_SCROLL_BAR_WIDGET_CLASS
  5115.  
  5116.     :XMN_PAGE_DECREMENT_CALLBACK    XmNpageDecrementCallback
  5117.  
  5118.         XM_SCROLL_BAR_WIDGET_CLASS
  5119.  
  5120.     :XMN_TO_TOP_CALLBACK        XmNtoTopCallback
  5121.  
  5122.         XM_SCROLL_BAR_WIDGET_CLASS
  5123.  
  5124.     :XMN_TO_BOTTOM_CALLBACK        XmNtoBottomCallback
  5125.  
  5126.         XM_SCROLL_BAR_WIDGET_CLASS
  5127.  
  5128.     :XMN_NO_MATCH_CALLBACK        XmNnoMatchCallback
  5129.  
  5130.         XM_SELECTION_BOX_WIDGET_CLASS
  5131.  
  5132.     :XMN_APPLY_CALLBACK        XmNapplyCallback
  5133.  
  5134.         XM_SELECTION_BOX_WIDGET_CLASS
  5135.  
  5136.     :XMN_LOSING_FOCUS_CALLBACK    XmNlosingFocusCallback
  5137.  
  5138.         XM_TEXT_WIDGET_CLASS
  5139.        #ifdef MOTIF_1.1
  5140.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_TEXT_FIELD_WIDGET_CLASS
  5141.        #endif
  5142.  
  5143.     :XMN_MODIFY_VERIFY_CALLBACK    XmNmodifyVerifyCallback
  5144.  
  5145.         XM_TEXT_WIDGET_CLASS
  5146.        #ifdef MOTIF_1.1
  5147.         XM_TEXT_FIELD_WIDGET_CLASS
  5148.        #endif
  5149.  
  5150.     :XMN_MOTION_VERIFY_CALLBACK    XmNmotionVerifyCallback
  5151.  
  5152.         XM_TEXT_WIDGET_CLASS
  5153.        #ifdef MOTIF_1.1
  5154.         XM_TEXT_FIELD_WIDGET_CLASS
  5155.        #endif
  5156.  
  5157.    #ifdef MOTIF_1.1
  5158.     :XMN_GAIN_PRIMARY_CALLBACK    XmNgainPrimaryCallback
  5159.  
  5160.         XM_TEXT_WIDGET_CLASS XM_TEXT_FIELD_WIDGET_CLASS
  5161.  
  5162.     :XMN_LOSE_PRIMARY_CALLBACK    XmNlosePrimaryCallback
  5163.  
  5164.         XM_TEXT_WIDGET_CLASS XM_TEXT_FIELD_WIDGET_CLASS
  5165.  
  5166.     :XMN_FOCUS_MOVED_CALLBACK    XmNfocusMovedCallback
  5167.  
  5168.         <SHELL_WIDGET_CLASS>
  5169.  
  5170.     :XMN_REALIZE_CALLBACK        XmNrealizeCallback
  5171.  
  5172.         <SHELL_WIDGET_CLASS>
  5173.    #endif /* MOTIF 1.1 */
  5174.  
  5175. ______________________________________________________________________________
  5176. #ifdef MOTIF_1.1
  5177. ** XmRCommandWindowLocation: [MOTIF 1.1 only]
  5178.  
  5179. *** Type Information:
  5180.  
  5181.     Resource representation type XmRCommandWindowLocation corresponds to an
  5182.     enumerated type. The following keyword symbols represent the valid
  5183.     WINTERP-Lisp values for this type and their associated Motif constants:
  5184.  
  5185.         :COMMAND_ABOVE_WORKSPACE    XmCOMMAND_ABOVE_WORKSPACE
  5186.         :COMMAND_BELOW_WORKSPACE    XmCOMMAND_BELOW_WORKSPACE
  5187.  
  5188.     You may also specify a STRING value which will be automatically
  5189.     converted to XmRCommandWindowLocation by Motif's resource converters.
  5190.     These values would be the same as one would specify in $HOME/.Xdefaults.
  5191.  
  5192.  
  5193. *** Resource names and the widget classes they apply to:
  5194.  
  5195.     :XMN_COMMAND_WINDOW_LOCATION        XmNcommandWindowLocation
  5196.  
  5197.         XM_MAIN_WINDOW_WIDGET_CLASS
  5198.  
  5199. #endif /* MOTIF_1.1 */
  5200.  
  5201. ______________________________________________________________________________
  5202.  
  5203. ** XmRChar (Motif 1.0) // XmRKeySym (Motif 1.1)
  5204.  
  5205. *** Type Information:
  5206.  
  5207.     Resource representation type XmRChar/XmRKeySym corresponds to the
  5208.     WINTERP-Lisp type CHARACTER.
  5209.  
  5210.     You may also specify a STRING value which will be automatically
  5211.     converted to XmRChar/XmRKeySym by Motif's resource converters.
  5212.     These values would be the same as one would specify in $HOME/.Xdefaults.
  5213.  
  5214.  
  5215. *** Resource names and the widget classes they apply to:
  5216.  
  5217.     :XMN_MNEMONIC            XmNmnemonic
  5218.  
  5219.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  5220.         XM_ROW_COLUMN_WIDGET_CLASS
  5221.  
  5222.    #ifdef MOTIF_1.1
  5223.     :XMN_OPTION_MNEMONIC        XmNoptionMnemonic
  5224.  
  5225.         <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_OPTION_MENU>
  5226.    #endif /* MOTIF_1.1 */
  5227.  
  5228. ______________________________________________________________________________
  5229.  
  5230. #ifdef MOTIF_1.0
  5231. ** XmRDimension: [MOTIF 1.0 only]
  5232.  
  5233. *** Type Information:
  5234.  
  5235.     Resource representation type XmRDimension corresponds to
  5236.     WINTERP-Lisp type FIXNUM, and further restricts that type to the
  5237.     subrange of non-negative integers.
  5238.  
  5239.     You may also specify a STRING value which will be automatically
  5240.     converted to XmRDimension by Motif's resource converters.
  5241.     These values would be the same as one would specify in $HOME/.Xdefaults.
  5242.  
  5243.  
  5244. *** Resource names and the widget classes they apply to:
  5245.  
  5246.     :XMN_SPACING            XmNspacing
  5247.  
  5248.         XM_PANED_WINDOW_WIDGET_CLASS
  5249.         XM_ROW_COLUMN_WIDGET_CLASS
  5250.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  5251.  
  5252.         Note -- Motif 1.0 has a bug in that :XMN_SPACING is
  5253.         inconsistently declared across widget classes. In
  5254.         XM_ROW_COLUMN_WIDGET_CLASS, it is declared as XmRDimension; in
  5255.         XM_TOGGLE_BUTTON_WIDGET_CLASS and XM_TOGGLE_BUTTON_GADGET_CLASS
  5256.         it is declared as XmRShort; and it's declared as XmRInt in
  5257.         XM_PANED_WINDOW_WIDGET_CLASS. Note that in some architectures,
  5258.         this may result in the bug of bogus retrieval and/or setting of
  5259.         values....
  5260.  
  5261.     :XMN_WIDTH            XmNwidth
  5262.  
  5263.         <WIDGET_CLASS>
  5264.  
  5265.     :XMN_HEIGHT            XmNheight
  5266.  
  5267.         <WIDGET_CLASS>
  5268.  
  5269.     :XMN_BORDER_WIDTH        XmNborderWidth
  5270.  
  5271.         <WIDGET_CLASS> <XM_GADGET_CLASS> <XM_MANAGER_WIDGET_CLASS>
  5272.         <XM_PRIMITIVE_WIDGET_CLASS>
  5273.  
  5274.     :XMN_SASH_WIDTH            XmNsashWidth
  5275.  
  5276.         XM_PANED_WINDOW_WIDGET_CLASS
  5277.  
  5278.     :XMN_SASH_HEIGHT        XmNsashHeight
  5279.  
  5280.         XM_PANED_WINDOW_WIDGET_CLASS
  5281.  
  5282.     :XMN_RCMARGIN_WIDTH        XmNmarginWidth
  5283.  
  5284.         XM_ROW_COLUMN_WIDGET_CLASS
  5285.  
  5286.         Note -- :XMN_RCMARGIN_WIDTH is an alias for XmNmarginWidth
  5287.         for the Motif Row Column Widget. Motif 1.0 has a bug in
  5288.         that it inconsistently declares XmNmarginWidth as 'short' in
  5289.         a number of widget classes, but uses 'unsigned int' for the
  5290.         rowcolumn widget. On some architectures, this may cause
  5291.         method :get_values to retrieve garbage.
  5292.  
  5293.     :XMN_RCMARGIN_HEIGHT        XmNmarginHeight
  5294.  
  5295.         XM_ROW_COLUMN_WIDGET_CLASS
  5296.  
  5297.         Note -- :XMN_RCMARGIN_HEIGHT is an alias for XmNmarginHeight
  5298.         for the Motif Row Column Widget. Motif 1.0 has a bug in
  5299.         that it inconsistently declares XmNmarginHeight as 'short' in
  5300.         a number of widget classes, but uses 'unsigned int' for the
  5301.         rowcolumn widget. On some architectures, this may cause
  5302.         method :get_values to retrieve garbage.
  5303.  
  5304.     :XMN_ENTRY_BORDER        XmNentryBorder
  5305.  
  5306.         XM_ROW_COLUMN_WIDGET_CLASS
  5307.  
  5308.     :XMN_SCALE_WIDTH        XmNscaleWidth
  5309.  
  5310.         XM_SCALE_WIDGET_CLASS
  5311.  
  5312.     :XMN_SCALE_HEIGHT        XmNscaleHeight
  5313.  
  5314.         XM_SCALE_WIDGET_CLASS
  5315. #endif /* Motif 1.0 */
  5316.  
  5317. ______________________________________________________________________________
  5318.  
  5319. #ifdef MOTIF_1.1
  5320. ** XmRHorizontalDimension: [MOTIF 1.1 only]
  5321.  
  5322. *** Type Information:
  5323.  
  5324.     Resource representation type XmRHorizontalDimension corresponds to
  5325.     WINTERP-Lisp type FIXNUM, and further restricts that type to the
  5326.     subrange of non-negative integers.
  5327.  
  5328.     If you specify a string as the value of an XmRHorizontalDimension, Motif
  5329.     1.1 will automatically convert the string to a vertical axis dimension
  5330.     using Motif's "resolution independence"    capabilities. For more
  5331.     information on resolution independence, see the :XMN_UNIT_TYPE
  5332.     (XmNunitType) resource description in the manual pages for XmGadget(3X),
  5333.     XmManager(3X), and XmPrimitive(3X). Also see the :XMN_SHELL_UNIT_TYPE
  5334.     (XmNshellUnitType) resource description in VendorShell(3X).
  5335.  
  5336. *** Resource names and the widget classes they apply to:
  5337.  
  5338.     :XMN_SPACING            XmNspacing
  5339.  
  5340.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  5341.         XM_PANED_WINDOW_WIDGET_CLASS
  5342.         XM_ROW_COLUMN_WIDGET_CLASS
  5343.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  5344.  
  5345.         Note -- Motif 1.1 inconsistently declares resource XmNspacing:
  5346.             XmRDimension -- Xm/ScrolledW.c
  5347.             XmRHorizontalDimension -- Xm/RowColumn.c Xm/ToggleB.c Xm/ToggleBG.c
  5348.             XmRVerticalDimension -- Xm/PanedW.c
  5349.         In WINTERP, XmNspacing is treated as XmRHorizontalDimension for
  5350.         all widget classes. If you call :set_values :XMN_SPACING on
  5351.         a XM_SCROLLED_WINDOW_WIDGET_CLASS or
  5352.         XM_PANED_WINDOW_WIDGET_CLASS instance, note that when you give
  5353.         string argument as a resource value the string will be converted
  5354.         in terms of the current horizontal-dimension
  5355.         resolution-independence settings. For these cases, if you want
  5356.         resolution independent conversions, you must set this resource
  5357.         directly via ~/.Xdefaults, xrdb(1), etc. Alternately, just
  5358.         don't ask for resolution-independent conversions through
  5359.         WINTERP by specifying FIXNUM values to the problem resources.
  5360.  
  5361.     :XMN_SHADOW_THICKNESS        XmNshadowThickness
  5362.  
  5363.         <GADGET_CLASS> <PRIMITIVE_WIDGET_CLASS> <MANAGER_WIDGET_CLASS>
  5364.         XM_DRAWN_BUTTON_WIDGET_CLASS XM_SCROLLED_WINDOW_WIDGET_CLASS
  5365.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_ROW_COLUMN_WIDGET_CLASS
  5366.         XM_CASCADE_BUTTON_WIDGET_CLASS XM_CASCADE_BUTTON_GADGET_CLASS
  5367.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  5368.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  5369.  
  5370.     :XMN_HIGHLIGHT_THICKNESS    XmNhighlightThickness
  5371.  
  5372.         <GADGET_CLASS> <PRIMITIVE_WIDGET_CLASS>
  5373.         XM_CASCADE_BUTTON_WIDGET_CLASS XM_CASCADE_BUTTON_GADGET_CLASS
  5374.         XM_DRAWN_BUTTON_WIDGET_CLASS
  5375.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  5376.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  5377.         XM_SCALE_WIDGET_CLASS XM_SCROLL_BAR_WIDGET_CLASS
  5378.         XM_SEPARATOR_WIDGET_CLASS XM_SEPARATOR_GADGET_CLASS
  5379.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  5380.  
  5381.     :XMN_HORIZONTAL_SPACING        XmNhorizontalSpacing
  5382.  
  5383.         XM_FORM_WIDGET_CLASS
  5384.  
  5385.     :XMN_WIDTH            XmNwidth
  5386.  
  5387.         <SHELL_WIDGET_CLASS> <GADGET_CLASS> <PRIMITIVE_CLASS>
  5388.         <MANAGER_CLASS> XM_SCALE_WIDGET_CLASS
  5389.  
  5390.     :XMN_BORDER_WIDTH        XmNborderWidth
  5391.  
  5392.         <SHELL_WIDGET_CLASS> <WIDGET_CLASS> <GADGET_CLASS>
  5393.         <PRIMITIVE_CLASS> <MANAGER_CLASS>
  5394.  
  5395.     :XMN_MARGIN_LEFT        XmNmarginLeft
  5396.  
  5397.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  5398.  
  5399.     :XMN_MARGIN_RIGHT        XmNmarginRight
  5400.  
  5401.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  5402.  
  5403.     :XMN_LIST_MARGIN_WIDTH        XmNlistMarginWidth
  5404.  
  5405.         XM_LIST_WIDGET_CLASS
  5406.  
  5407.     :XMN_MAIN_WINDOW_MARGIN_WIDTH    XmNmainWindowMarginWidth
  5408.  
  5409.         XM_MAIN_WINDOW_MARGIN_WIDTH
  5410.  
  5411.     :XMN_SASH_WIDTH            XmNsashWidth
  5412.  
  5413.         XM_PANED_WINDOW_WIDGET_CLASS
  5414.  
  5415.     :XMN_SASH_SHADOW_THICKNESS    XmNsashShadowThickness
  5416.  
  5417.         XM_PANED_WINDOW_WIDGET_CLASS
  5418.             
  5419.     :XMN_DEFAULT_BUTTON_SHADOW_THICKNESS XmNdefaultButtonShadowThickness
  5420.  
  5421.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  5422.  
  5423.     :XMN_ENTRY_BORDER        XmNentryBorder
  5424.  
  5425.         XM_ROW_COLUMN_WIDGET_CLASS
  5426.  
  5427.     :XMN_SCALE_WIDTH        XmNscaleWidth
  5428.  
  5429.         XM_SCALE_WIDGET_CLASS
  5430.  
  5431.     :XMN_SCROLLED_WINDOW_MARGIN_WIDTH XmNscrolledWindowMarginWidth
  5432.  
  5433.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  5434.  
  5435.     :XMN_MARGIN            XmNmargin
  5436.  
  5437. #endif /* MOTIF_1.1 */
  5438.  
  5439. ______________________________________________________________________________
  5440.  
  5441. #ifdef MOTIF_1.1
  5442. ** XmRVerticalDimension: [MOTIF 1.1 only]
  5443.  
  5444. *** Type Information:
  5445.  
  5446.     Resource representation type XmRVerticalDimension corresponds to
  5447.     WINTERP-Lisp type FIXNUM, and further restricts that type to the
  5448.     subrange of non-negative integers.
  5449.  
  5450.     If you specify a string as the value of an XmRVerticalDimension, Motif
  5451.     1.1 will automatically convert the string to a vertical axis dimension
  5452.     using Motif's "resolution independence"    capabilities. For more
  5453.     information on resolution independence, see the :XMN_UNIT_TYPE
  5454.     (XmNunitType) resource description in the manual pages for XmGadget(3X),
  5455.     XmManager(3X), and XmPrimitive(3X). Also see the :XMN_SHELL_UNIT_TYPE
  5456.     (XmNshellUnitType) resource description in VendorShell(3X).
  5457.  
  5458. *** Resource names and the widget classes they apply to:
  5459.  
  5460.     :XMN_HEIGHT            XmNheight
  5461.  
  5462.         <WIDGET_CLASS> <SHELL_WIDGET_CLASS>
  5463.  
  5464.         Note -- Motif 1.1 inconsistently declares resource XmNheight:
  5465.             XmRShellVertDim -- Xm/Vendor.c
  5466.             XtRDimension -- Xt/RectObj.c
  5467.             XmRVerticalDimension -- Xm/Gadget.c Xm/Manager.c Xm/Primitive.c Xm/Scale.c
  5468.  
  5469.     :XMN_MARGIN_HEIGHT            XmNmarginHeight
  5470.  
  5471.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_DRAWING_AREA_WIDGET_CLASS
  5472.         XM_FORM_WIDGET_CLASS XM_FRAME_WIDGET_CLASS 
  5473.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  5474.         XM_PANED_WIDGET_CLASS XM_ROW_COLUMN_WIDGET_CLASS
  5475.         XM_TEXT_WIDGET_CLASS XM_TEXT_FIELD_WIDGET_CLASS
  5476.  
  5477.     :XMN_VERTICAL_SPACING            XmNverticalSpacing
  5478.  
  5479.         XM_FORM_WIDGET_CLASS
  5480.  
  5481.     :XMN_MARGIN_TOP                XmNmarginTop
  5482.  
  5483.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  5484.  
  5485.     :XMN_MARGIN_BOTTOM            XmNmarginBottom
  5486.  
  5487.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  5488.  
  5489.     :XMN_LIST_SPACING            XmNlistSpacing
  5490.  
  5491.         XM_LIST_WIDGET_CLASS
  5492.  
  5493.     :XMN_LIST_MARGIN_HEIGHT            XmNlistMarginHeight
  5494.  
  5495.         XM_LIST_WIDGET_CLASS
  5496.  
  5497.     :XMN_MAIN_WINDOW_MARGIN_HEIGHT        XmNmainWindowMarginHeight
  5498.  
  5499.         XM_MAIN_WINDOW_WIDGET_CLASS
  5500.  
  5501.     :XMN_SASH_HEIGHT            XmNsashHeight
  5502.  
  5503.         XM_PANED_WIDGET_CLASS
  5504.  
  5505.     :XMN_PANE_MINIMUM            XmNpaneMinimum
  5506.  
  5507.         XM_PANED_WIDGET_CLASS
  5508.  
  5509.     :XMN_PANE_MAXIMUM            XmNpaneMaximum
  5510.  
  5511.         XM_PANED_WIDGET_CLASS
  5512.  
  5513.     :XMN_SCALE_HEIGHT            XmNscaleHeight
  5514.  
  5515.         XM_SCALE_WIDGET_CLASS
  5516.  
  5517.     :XMN_SCROLLED_WINDOW_MARGIN_HEIGHT    XmNscrolledWindowMarginHeight
  5518.  
  5519.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  5520.  
  5521.     :XMN_INDICATOR_SIZE            XmNindicatorSize
  5522.  
  5523.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  5524.  
  5525. #endif /* MOTIF_1.1 */
  5526.  
  5527. ______________________________________________________________________________
  5528.  
  5529. ** XmRDefaultButtonType:
  5530.  
  5531. *** Type Information:
  5532.  
  5533.     Resource representation type XmRDefaultButtonType corresponds to an
  5534.     enumerated type. The following keyword symbols represent the valid
  5535.     WINTERP-Lisp values for this type and their associated Motif constants:
  5536.  
  5537.         :DIALOG_OK_BUTTON        XmDIALOG_OK_BUTTON
  5538.         :DIALOG_CANCEL_BUTTON        XmDIALOG_CANCEL_BUTTON
  5539.         :DIALOG_HELP_BUTTON        XmDIALOG_HELP_BUTTON
  5540.  
  5541.     You may also specify a STRING value which will be automatically
  5542.     converted to XmRDefaultButtonType by Motif's resource converters.
  5543.     These values would be the same as one would specify in $HOME/.Xdefaults.
  5544.  
  5545.  
  5546. *** Resource names and the widget classes they apply to:
  5547.  
  5548.     :XMN_DEFAULT_BUTTON_TYPE    XmNdefaultButtonType
  5549.  
  5550.         XM_MESSAGE_BOX_WIDGET_CLASS
  5551.  
  5552. ______________________________________________________________________________
  5553.  
  5554. ** XmRDeleteResponse:
  5555.  
  5556. *** Type Information:
  5557.  
  5558.     Resource representation type XmRDeleteResponse corresponds to an
  5559.     enumerated type. The following keyword symbols represent the valid
  5560.     WINTERP-Lisp values for this type and their associated Motif constants:
  5561.  
  5562.         :DESTROY        XmDESTROY
  5563.         :UNMAP            XmUNMAP
  5564.         :DO_NOTHING        XmDO_NOTHING
  5565.  
  5566.     You may also specify a STRING value which will be automatically
  5567.     converted to XmRDeleteResponse by Motif's resource converters.
  5568.     These values would be the same as one would specify in $HOME/.Xdefaults.
  5569.  
  5570.  
  5571. *** Resource names and the widget classes they apply to:
  5572.  
  5573.     :XMN_DELETE_RESPONSE        XmNdeleteResponse
  5574.  
  5575.         <SHELL_WIDGET_CLASS> XM_DIALOG_POPUP_SHELL_WIDGET_CLASS
  5576.  
  5577. ______________________________________________________________________________
  5578.  
  5579. ** XmRDialogStyle:
  5580.  
  5581. *** Type Information:
  5582.  
  5583.     Resource representation type XmRDialogStyle corresponds to an
  5584.     enumerated type. The following keyword symbols represent the valid
  5585.     WINTERP-Lisp values for this type and their associated Motif constants:
  5586.  
  5587.    #ifdef MOTIF_1.0
  5588.         :DIALOG_WORK_AREA        XmDIALOG_WORK_AREA
  5589.         :DIALOG_MODELESS        XmDIALOG_MODELESS
  5590.         :DIALOG_APPLICATION_MODAL    XmDIALOG_APPLICATION_MODAL
  5591.         :DIALOG_SYSTEM_MODAL        XmDIALOG_SYSTEM_MODAL
  5592.    #endif
  5593.    #ifdef MOTIF_1.1
  5594.         :DIALOG_MODELESS                  XmDIALOG_MODELESS
  5595.         :DIALOG_PRIMARY_APPLICATION_MODAL XmDIALOG_PRIMARY_APPLICATION_MODAL
  5596.         :DIALOG_FULL_APPLICATION_MODAL    XmDIALOG_FULL_APPLICATION_MODAL
  5597.         :DIALOG_SYSTEM_MODAL              XmDIALOG_SYSTEM_MODAL
  5598.     
  5599.     Note 1: XmRDialogStyle value :DIALOG_APPLICATION_MODAL from Motif
  5600.     1.0 is obsolete, use :DIALOG_PRIMARY_APPLICATION_MODAL instead.
  5601.  
  5602.     Note 2: XmRDialogStyle value :DIALOG_WORK_AREA cannot be retrieved
  5603.     by WINTERP due to Motif 1.1 bug: enumeration XmDIALOG_WORK_AREA has
  5604.     same value (0) as XmDIALOG_MODELESS which means that if you set
  5605.     :DIALOG_WORK_AREA, method :GET_VALUES will retrieve :DIALOG_MODELESS
  5606.     (due to ordering...)
  5607.    #endif
  5608.  
  5609.     You may also specify a STRING value which will be automatically
  5610.     converted to XmRDialogStyle by Motif's resource converters.
  5611.     These values would be the same as one would specify in $HOME/.Xdefaults.
  5612.  
  5613.  
  5614. *** Resource names and the widget classes they apply to:
  5615.  
  5616.     :XMN_DIALOG_STYLE        XmNdialogStyle
  5617.  
  5618.         XM_BULLETIN_BOARD_WIDGET_CLASS
  5619.  
  5620. ______________________________________________________________________________
  5621.  
  5622. ** XmRDialogType:
  5623.  
  5624. *** Type Information:
  5625.  
  5626.     Resource representation type XmRDialogType corresponds to an
  5627.     enumerated type. The following keyword symbols represent the valid
  5628.     WINTERP-Lisp values for this type and their associated Motif constants:
  5629.  
  5630.         :DIALOG_ERROR        XmDIALOG_ERROR
  5631.         :DIALOG_INFORMATION    XmDIALOG_INFORMATION
  5632.         :DIALOG_MESSAGE        XmDIALOG_MESSAGE
  5633.         :DIALOG_QUESTION    XmDIALOG_QUESTION
  5634.         :DIALOG_WARNING        XmDIALOG_WARNING
  5635.         :DIALOG_WORKING        XmDIALOG_WORKING
  5636.         :DIALOG_PROMPT        XmDIALOG_PROMPT
  5637.         :DIALOG_SELECTION    XmDIALOG_SELECTION
  5638.         :DIALOG_COMMAND        XmDIALOG_COMMAND
  5639.  
  5640.     You may also specify a STRING value which will be automatically
  5641.     converted to XmRDialogType by Motif's resource converters.
  5642.     These values would be the same as one would specify in $HOME/.Xdefaults.
  5643.  
  5644.    #ifdef MOTIF_1.1
  5645.     Note that Motif 1.1 introduced a new bug which makes it impossible
  5646.     to do a :GET_VALUES of a XmRDialogType resource and retrieve values
  5647.     :DIALOG_PROMPT, :DIALOG_SELECTION, or :DIALOG_COMMAND. Even if you
  5648.     did a :SET_VALUES of an XmRDialogType resource to 
  5649.     :DIALOG_PROMPT, :DIALOG_SELECTION, or :DIALOG_COMMAND,
  5650.     method :GET_VALUES will return:
  5651.         :DIALOG_ERROR for :DIALOG_PROMPT
  5652.         :DIALOG_INFORMATION for :DIALOG_SELECTION
  5653.         :DIALOG_MESSAGE for :DIALOG_COMMAND
  5654.     And that of course means that values set and then retrieved from
  5655.     an XmRDialogType resource will not necessary be EQ.
  5656.    #endif
  5657.  
  5658. *** Resource names and the widget classes they apply to:
  5659.  
  5660.     :XMN_DIALOG_TYPE        XmNdialogType
  5661.  
  5662.         XM_COMMAND_WIDGET_CLASS XM_FILE_SELECTION_BOX_WIDGET_CLASS
  5663.         XM_MESSAGE_BOX_WIDGET_CLASS XM_SELECTION_BOX_WIDGET_CLASS
  5664.  
  5665. ______________________________________________________________________________
  5666.  
  5667. ** XmREditMode:
  5668.  
  5669. *** Type Information:
  5670.  
  5671.     Resource representation type XmREditMode corresponds to an enumerated
  5672.     type. The following keyword symbols represent the valid    WINTERP-Lisp
  5673.     values for this type and their associated Motif constants:
  5674.  
  5675.         :MULTI_LINE_EDIT    XmMULTI_LINE_EDIT
  5676.         :SINGLE_LINE_EDIT    XmSINGLE_LINE_EDIT
  5677.  
  5678.  
  5679. *** Resource names and the widget classes they apply to:
  5680.  
  5681.     :XMN_EDIT_MODE            XmNeditMode
  5682.  
  5683.         XM_TEXT_WIDGET_CLASS
  5684. ______________________________________________________________________________
  5685.  
  5686. #ifdef MOTIF_1.1
  5687. ** XmRFileTypeMask: [MOTIF 1.1 only]
  5688.  
  5689. *** Type Information:
  5690.  
  5691.     Resource representation type XmRFileTypeMask corresponds to an enumerated
  5692.     type. The following keyword symbols represent the valid    WINTERP-Lisp
  5693.     values for this type and their associated Motif constants:
  5694.  
  5695.         :FILE_DIRECTORY        XmFILE_DIRECTORY
  5696.         :FILE_REGULAR        XmFILE_REGULAR
  5697.         :FILE_ANY_TYPE        XmFILE_ANY_TYPE
  5698.  
  5699. *** Resource names and the widget classes they apply to:
  5700.  
  5701.     :XMN_FILE_TYPE_MASK        XmNfileTypeMask
  5702.  
  5703.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  5704.  
  5705. #endif /* MOTIF_1.1 */
  5706. ______________________________________________________________________________
  5707.  
  5708. ** XmRFontList:
  5709.  
  5710. *** Type Information:
  5711.  
  5712.     The current version of WINTERP does not allow you to get
  5713.     a widget's XmRFontList value since WINTERP-Lisp doesn't currently
  5714.     support XmRFontList as a type. Adding this type was not a high
  5715.     priority in this first release of WINTERP; I expect to add it in a 
  5716.     subsequent release along with various XmString utilities that use
  5717.     the XmFontList type.
  5718.  
  5719.     One may set a XmRFontList resource by specifying a STRING value
  5720.     corresponding to the font's name. These string values will then get
  5721.     looked up using Motif's font-searching and font-cacheing utilities.
  5722.     You may specify any value that you would specify to a XmRFontList
  5723.     resource in $HOME/.Xdefaults.
  5724.  
  5725.  
  5726. *** Resource names and the widget classes they apply to:
  5727.  
  5728.     :XMN_BUTTON_FONT_LIST        XmNbuttonFontList
  5729.  
  5730.         XM_BULLETIN_BOARD_WIDGET_CLASS
  5731.  
  5732.     :XMN_LABEL_FONT_LIST        XmNlabelFontList
  5733.  
  5734.         XM_BULLETIN_BOARD_WIDGET_CLASS
  5735.  
  5736.     :XMN_TEXT_FONT_LIST        XmNtextFontList
  5737.  
  5738.         XM_BULLETIN_BOARD_WIDGET_CLASS
  5739.  
  5740.     :XMN_FONT_LIST            XmNfontList
  5741.  
  5742.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS XM_LIST_WIDGET_CLASS
  5743.         XM_SCALE_WIDGET_CLASS XM_TEXT_WIDGET_CLASS
  5744.        #ifdef MOTIF_1.1
  5745.         XM_TEXT_FIELD_WIDGET_CLASS
  5746.        #endif /* MOTIF_1.1
  5747.  
  5748.    #ifdef MOTIF_1.1
  5749.     :XMN_DEFAULT_FONT_LIST    XmNdefaultFontList
  5750.  
  5751.         <SHELL_WIDGET_CLASS> XM_MENU_POPUP_SHELL_WIDGET_CLASS
  5752.  
  5753.    #endif /* MOTIF_1.1 */
  5754. ______________________________________________________________________________
  5755.  
  5756. ** XmRIndicatorType:
  5757.  
  5758. *** Type Information:
  5759.  
  5760.     Resource representation type XmRIndicatorType corresponds to an
  5761.     enumerated type. The following keyword symbols represent the valid
  5762.     WINTERP-Lisp values for this type and their associated Motif constants:
  5763.  
  5764.         :N_OF_MANY    XmN_OF_MANY
  5765.         :ONE_OF_MANY    XmONE_OF_MANY
  5766.  
  5767.     You may also specify a STRING value which will be automatically
  5768.     converted to XmRIndicatorType by Motif's resource converters.
  5769.     These values would be the same as one would specify in $HOME/.Xdefaults.
  5770.  
  5771.  
  5772. *** Resource names and the widget classes they apply to:
  5773.  
  5774.     :XMN_INDICATOR_TYPE        XmNindicatorType
  5775.  
  5776.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  5777. ______________________________________________________________________________
  5778.  
  5779. #ifdef MOTIF_1.1
  5780. ** XmRInitialState: [MOTIF 1.1 only]
  5781.  
  5782. *** Type Information:
  5783.  
  5784.     Resource representation type XtRInitialState/XmRInitialState
  5785.     corresponds to an enumerated type. The following keyword symbols
  5786.     represent the valid WINTERP-Lisp this type and their associated
  5787.     X11/Motif constants:
  5788.  
  5789.         :WITHDRAWN_STATE    WithdrawnState
  5790.         :NORMAL_STATE        NormalState
  5791.         :ICONIC_STATE        IconicState
  5792.  
  5793. *** Resource names and the widget classes they apply to:
  5794.  
  5795.     :XMN_INITIAL_STATE        XmNinitialState
  5796.  
  5797.         <SHELL_WIDGET_CLASS> <POPUP_SHELL_WIDGET_CLASS>
  5798.  
  5799. #endif /* MOTIF_1.1 */
  5800.  
  5801. ______________________________________________________________________________
  5802.  
  5803. ** XmRInt:
  5804.  
  5805. *** Type Information:
  5806.  
  5807.     Resource representation type XmRInt corresponds to WINTERP-Lisp type
  5808.     FIXNUM. On architectures where the range of type 'long' is
  5809.     different from the range of type 'int', FIXNUM values exceeding the
  5810.     minimum and maximum 'int' limits will cause XLISP to signal an error.
  5811.  
  5812.  
  5813. *** Resource names and the widget classes they apply to:
  5814.  
  5815.     :XMN_MAPPING_DELAY        XmNmappingDelay
  5816.  
  5817.         XM_CASCADE_BUTTON_WIDGET_CLASS XM_CASCADE_BUTTON_GADGET_CLASS
  5818.  
  5819.     :XMN_HISTORY_ITEM_COUNT        XmNhistoryItemCount
  5820.  
  5821.         XM_COMMAND_WIDGET_CLASS
  5822.  
  5823.     :XMN_HISTORY_MAX_ITEMS        XmNhistoryMaxItems
  5824.  
  5825.         XM_COMMAND_WIDGET_CLASS
  5826.  
  5827.     :XMN_HISTORY_VISIBLE_ITEM_COUNT    XmNhistoryVisibleItemCount
  5828.  
  5829.         XM_COMMAND_WIDGET_CLASS
  5830.  
  5831.     :XMN_FRACTION_BASE        XmNfractionBase
  5832.  
  5833.         XM_FORM_WIDGET_CLASS
  5834.  
  5835.     :XMN_TOP_POSITION        XmNtopPosition
  5836.  
  5837.         Any <WIDGET_CLASS> that has XM_FORM_WIDGET_CLASS constraints.
  5838.        #ifdef MOTIF_1.0
  5839.         XM_TEXT_WIDGET_CLASS (name changed to XmNtopCharacter in 1.1)
  5840.        #endif /* MOTIF_1.0 */
  5841.  
  5842.     :XMN_BOTTOM_POSITION        XmNbottomPosition
  5843.  
  5844.         Any <WIDGET_CLASS> that has XM_FORM_WIDGET_CLASS constraints.
  5845.  
  5846.     :XMN_LEFT_POSITION        XmNleftPosition
  5847.  
  5848.         Any <WIDGET_CLASS> that has XM_FORM_WIDGET_CLASS constraints.
  5849.  
  5850.     :XMN_RIGHT_POSITION        XmNrightPosition
  5851.  
  5852.         Any <WIDGET_CLASS> that has XM_FORM_WIDGET_CLASS constraints.
  5853.  
  5854.     :XMN_TOP_OFFSET            XmNtopOffset
  5855.  
  5856.         Any <WIDGET_CLASS> that has XM_FORM_WIDGET_CLASS constraints.
  5857.  
  5858.     :XMN_BOTTOM_OFFSET        XmNbottomOffset
  5859.  
  5860.         Any <WIDGET_CLASS> that has XM_FORM_WIDGET_CLASS constraints.
  5861.  
  5862.  
  5863.     :XMN_LEFT_OFFSET        XmNleftOffset
  5864.  
  5865.         Any <WIDGET_CLASS> that has XM_FORM_WIDGET_CLASS constraints.
  5866.  
  5867.     :XMN_RIGHT_OFFSET        XmNrightOffset
  5868.  
  5869.         Any <WIDGET_CLASS> that has XM_FORM_WIDGET_CLASS constraints.
  5870.  
  5871.     :XMN_ITEM_COUNT            XmNitemCount
  5872.  
  5873.         XM_LIST_WIDGET_CLASS
  5874.  
  5875.     :XMN_SELECTED_ITEM_COUNT    XmNselectedItemCount
  5876.  
  5877.         XM_LIST_WIDGET_CLASS
  5878.  
  5879.     :XMN_VISIBLE_ITEM_COUNT        XmNvisibleItemCount
  5880.  
  5881.         XM_LIST_WIDGET_CLASS
  5882.  
  5883.     :XMN_DOUBLE_CLICK_INTERVAL    XmNdoubleClickInterval
  5884.  
  5885.         XM_LIST_WIDGET_CLASS
  5886.             
  5887.     :XMN_VALUE            XmNvalue
  5888.  
  5889.         XM_SCALE_WIDGET_CLASS XM_SCROLL_BAR_WIDGET_CLASS
  5890.  
  5891.         Note -- resource name :XMN_VALUE will not set or
  5892.         retrieve a string value in XM_TEXT_WIDGET_CLASS instances.
  5893.         Motif 1.0 & 1.1 has a bug that inconsistently declares the value
  5894.         associated with the "message" XmNvalue as 'int' for 
  5895.         XM_SCALE_WIDGET_CLASS XM_SCROLL_BAR_WIDGET_CLASS, and
  5896.         as a 'string' for the text widget. Thus, to retrieve or
  5897.         set the string in a text widget, use the alias resource name
  5898.         :XMN_STRING.
  5899.  
  5900.     :XMN_MAXIMUM            XmNmaximum
  5901.  
  5902.         XM_SCALE_WIDGET_CLASS XM_SCROLL_BAR_WIDGET_CLASS
  5903.         #ifdef MOTIF_1.0
  5904.         XM_PANED_WINDOW_WIDGET_CLASS
  5905.         #else
  5906.         For Motif 1.1's XM_PANED_WINDOW_WIDGET_CLASS, :XMN_MAXIMUM
  5907.         has been changed to :XMN_PANE_MAXIMUM.
  5908.         #endif /* MOTIF_1.0 */
  5909.  
  5910.     :XMN_MINIMUM            XmNminimum
  5911.  
  5912.         XM_SCALE_WIDGET_CLASS XM_SCROLL_BAR_WIDGET_CLASS
  5913.         #ifdef MOTIF_1.0
  5914.         XM_PANED_WINDOW_WIDGET_CLASS
  5915.         #else
  5916.         For Motif 1.1's XM_PANED_WINDOW_WIDGET_CLASS, :XMN_MINIMUM
  5917.         has been changed to :XMN_PANE_MINIMUM.
  5918.         #endif /* MOTIF_1.0 */
  5919.  
  5920.     :XMN_SLIDER_SIZE        XmNsliderSize
  5921.  
  5922.         XM_SCROLL_BAR_WIDGET_CLASS
  5923.  
  5924.     :XMN_INCREMENT            XmNincrement
  5925.  
  5926.         XM_SCROLL_BAR_WIDGET_CLASS
  5927.  
  5928.     :XMN_PAGE_INCREMENT        XmNpageIncrement
  5929.  
  5930.         XM_SCROLL_BAR_WIDGET_CLASS
  5931.  
  5932.     :XMN_INITIAL_DELAY        XmNinitialDelay
  5933.  
  5934.         XM_SCROLL_BAR_WIDGET_CLASS
  5935.  
  5936.     :XMN_REPEAT_DELAY        XmNrepeatDelay
  5937.  
  5938.         XM_SCROLL_BAR_WIDGET_CLASS
  5939.  
  5940.     :XMN_LIST_ITEM_COUNT        XmNlistItemCount
  5941.  
  5942.         XM_SELECTION_BOX_WIDGET_CLASS
  5943.  
  5944.     :XMN_LIST_VISIBLE_ITEM_COUNT    XmNlistVisibleItemCount
  5945.  
  5946.         XM_SELECTION_BOX_WIDGET_CLASS
  5947.  
  5948.     :XMN_MAX_LENGTH            XmNmaxLength
  5949.  
  5950.         XM_TEXT_WIDGET_CLASS
  5951.         #ifdef MOTIF_1.1
  5952.         XM_TEXT_FIELD_WIDGET_CLASS
  5953.         #endif /* MOTIF_1.1 */
  5954.  
  5955.     :XMN_BLINK_RATE            XmNblinkRate
  5956.  
  5957.         XM_TEXT_WIDGET_CLASS
  5958.         #ifdef MOTIF_1.1
  5959.         XM_TEXT_FIELD_WIDGET_CLASS
  5960.         #endif /* MOTIF_1.1 */
  5961.  
  5962.     :XMN_SELECTION_ARRAY_COUNT    XmNselectionArrayCount
  5963.  
  5964.         XM_TEXT_WIDGET_CLASS
  5965.         #ifdef MOTIF_1.1
  5966.         XM_TEXT_FIELD_WIDGET_CLASS
  5967.         #endif /* MOTIF_1.1 */
  5968.  
  5969.     :XMN_SELECT_THRESHOLD        XmNselectThreshold
  5970.  
  5971.         XM_TEXT_WIDGET_CLASS
  5972.         #ifdef MOTIF_1.1
  5973.         XM_TEXT_FIELD_WIDGET_CLASS
  5974.         #endif /* MOTIF_1.1 */
  5975.  
  5976.     :XMN_MWM_DECORATIONS        XmNmwmDecorations
  5977.  
  5978.         <SHELL_WIDGET_CLASS>
  5979.  
  5980.         Note: The value supplied or retrieved via resource
  5981.         :XMN_MWM_DECORATIONS is a FIXNUM mask that can be created by
  5982.         doing the logical inclusive or (see function 'logior') of
  5983.         the following symbol's values:
  5984.             MWM_DECOR_ALL MWM_DECOR_BORDER MWM_DECOR_RESIZEH 
  5985.             MWM_DECOR_TITLE MWM_DECOR_MENU
  5986.             MWM_DECOR_MINIMIZE MWM_DECOR_MAXIMIZE
  5987.  
  5988.     :XMN_MWM_FUNCTIONS        XmNmwmFunctions
  5989.  
  5990.         <SHELL_WIDGET_CLASS>
  5991.  
  5992.         Note: The value supplied or retrieved via resource
  5993.         :XMN_MWM_FUNCTIONS is a FIXNUM mask that can be created by
  5994.         doing the logical inclusive or (see function 'logior') of
  5995.         the following symbol's values:
  5996.             MWM_FUNC_ALL MWM_FUNC_RESIZE MWM_FUNC_MOVE
  5997.             MWM_FUNC_MINIMIZE MWM_FUNC_MAXIMIZE MWM_FUNC_CLOSE
  5998.  
  5999.     :XMN_MWM_INPUT_MODE        XmNmwmInputMode
  6000.  
  6001.         <SHELL_WIDGET_CLASS>
  6002.  
  6003.         Note: The value supplied or retrieved via resource
  6004.         :XMN_MWM_INPUT_MODE is a FIXNUM mask that can be created by
  6005.         doing the logical inclusive or (see function 'logior') of
  6006.         the following symbol's values:
  6007.            #ifdef MOTIF_1.1
  6008.             MWM_INPUT_MODELESS MWM_INPUT_PRIMARY_APPLICATION_MODAL
  6009.             MWM_INPUT_SYSTEM_MODAL MWM_INPUT_FULL_APPLICATION_MODAL
  6010.            #endif /* MOTIF_1.1 */
  6011.            #ifdef MOTIF_1.0
  6012.             MWM_INPUT_MODELESS MWM_INPUT_APPLICATION_MODAL
  6013.             MWM_INPUT_SYSTEM_MODAL
  6014.            #endif
  6015.  
  6016.     :XMN_DEPTH            XmNdepth
  6017.  
  6018.         <SHELL_WIDGET_CLASS> <WIDGET_CLASS>
  6019.  
  6020.     :XMN_WM_TIMEOUT            XmNwmTimeout
  6021.  
  6022.         <SHELL_WIDGET_CLASS>
  6023.  
  6024.    #ifdef MOTIF_1.1
  6025.  
  6026.     :XMN_DIR_LIST_ITEM_COUNT    XmNdirListItemCount
  6027.  
  6028.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  6029.  
  6030.     :XMN_FILE_LIST_ITEM_COUNT    XmNfileListItemCount
  6031.  
  6032.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  6033.  
  6034.     :XMN_TOP_ITEM_POSITION        XmNtopItemPosition
  6035.  
  6036.         XM_LIST_WIDGET_CLASS
  6037.  
  6038.     :XMN_POST_FROM_COUNT        XmNpostFromCount
  6039.  
  6040.         XM_ROW_COLUMN_WIDGET_CLASS
  6041.  
  6042.     :XMN_SCALE_MULTIPLE        XmNscaleMultiple
  6043.  
  6044.         XM_SCALE_WIDGET_CLASS
  6045.  
  6046.     :XMN_BUTTON_COUNT        XmNbuttonCount
  6047.  
  6048.         <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_*>
  6049.  
  6050.     :XMN_POST_FROM_BUTTON        XmNpostFromButton
  6051.  
  6052.         <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_*>
  6053.  
  6054.     :XMN_BUTTON_SET            XmNbuttonSet
  6055.  
  6056.         <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_*>
  6057.  
  6058.    #endif /* MOTIF_1.1 */
  6059.  
  6060.    #ifdef MOTIF_1.0
  6061.  
  6062.     :XMN_MIN_WIDTH            XmNminWidth
  6063.  
  6064.         <SHELL_WIDGET_CLASS>
  6065.  
  6066.     :XMN_MAX_WIDTH            XmNmaxWidth
  6067.  
  6068.         <SHELL_WIDGET_CLASS>
  6069.  
  6070.     :XMN_MIN_HEIGHT            XmNminHeight
  6071.  
  6072.         <SHELL_WIDGET_CLASS>
  6073.  
  6074.     :XMN_MAX_HEIGHT            XmNmaxHeight
  6075.  
  6076.         <SHELL_WIDGET_CLASS>
  6077.  
  6078.     :XMN_WIDTH_INC            XmNwidthInc
  6079.  
  6080.         <SHELL_WIDGET_CLASS>
  6081.  
  6082.     :XMN_HEIGHT_INC            XmNheightInc
  6083.  
  6084.         <SHELL_WIDGET_CLASS>
  6085.  
  6086.     :XMN_MIN_ASPECT_X        XmNminAspectX
  6087.  
  6088.         <SHELL_WIDGET_CLASS>
  6089.  
  6090.     :XMN_MIN_ASPECT_Y        XmNminAspectY
  6091.  
  6092.         <SHELL_WIDGET_CLASS>
  6093.  
  6094.     :XMN_MAX_ASPECT_X        XmNmaxAspectX
  6095.  
  6096.         <SHELL_WIDGET_CLASS>
  6097.  
  6098.     :XMN_MAX_ASPECT_Y        XmNmaxAspectY
  6099.  
  6100.         <SHELL_WIDGET_CLASS>
  6101.  
  6102.     #ifdef MOTIF_1.0
  6103.     :XMN_INITIAL_STATE        XmNinitialState
  6104.  
  6105.         <SHELL_WIDGET_CLASS>
  6106.     #else
  6107.         Note: In Motif 1.1, :XMN_INITIAL_STATE is an enumerated
  6108.         type, see section on resource representation type
  6109.         XtRInitialState.
  6110.     #endif /* MOTIF_1.0 */
  6111.  
  6112.     :XMN_ICON_X            XmNiconX
  6113.  
  6114.         <SHELL_WIDGET_CLASS>
  6115.  
  6116.     :XMN_ICON_Y            XmNiconY
  6117.  
  6118.         <SHELL_WIDGET_CLASS>
  6119.  
  6120.     :XMN_HORIZONTAL_SPACING        XmNhorizontalSpacing
  6121.  
  6122.         XM_FORM_WIDGET_CLASS
  6123.  
  6124.     :XMN_VERTICAL_SPACING        XmNverticalSpacing
  6125.  
  6126.         XM_FORM_WIDGET_CLASS
  6127.  
  6128.     :XMN_SASH_SHADOW_THICKNESS    XmNsashShadowThickness
  6129.  
  6130.         XM_PANED_WINDOW_WIDGET_CLASS
  6131.  
  6132.     :XMN_CURSOR_POSITION        XmNcursorPosition
  6133.  
  6134.         XM_TEXT_WIDGET_CLASS
  6135.  
  6136.    #endif /* MOTIF 1.0 */
  6137.  
  6138. ______________________________________________________________________________
  6139.  
  6140. #ifdef MOTIF_1.1
  6141. ** XmRHorizontalInt: [MOTIF 1.1 only]
  6142.  
  6143. *** Type Information:
  6144.  
  6145.     Resource representation type XmRHorizontalInt corresponds to
  6146.     WINTERP-Lisp type FIXNUM. On architectures where the range of type
  6147.     'long' is different from the range of type 'int', FIXNUM values
  6148.     exceeding the minimum and maximum 'int' limits will cause XLISP to
  6149.     signal an error.
  6150.  
  6151.     If you specify a string as the value of an XmRHorizontalInt, Motif
  6152.     1.1 will automatically convert the string to a horizontal axis
  6153.     size or position using Motif's "resolution independence"
  6154.     capabilities. For more information on resolution independence, see
  6155.     the :XMN_UNIT_TYPE (XmNunitType) resource description in the manual
  6156.     pages for XmGadget(3X), XmManager(3X), and XmPrimitive(3X). Also see the
  6157.     :XMN_SHELL_UNIT_TYPE (XmNshellUnitType) resource description in
  6158.     VendorShell(3X).
  6159.  
  6160.  
  6161. *** Resource names and the widget classes they apply to:
  6162.  
  6163.     :XMN_BASE_WIDTH            XmNbaseWidth
  6164.  
  6165.         <SHELL_WIDGET_CLASS>
  6166.  
  6167.     :XMN_MIN_WIDTH            XmNminWidth
  6168.  
  6169.         <SHELL_WIDGET_CLASS>
  6170.  
  6171.     :XMN_MAX_WIDTH            XmNmaxWidth
  6172.  
  6173.         <SHELL_WIDGET_CLASS>
  6174.  
  6175.     :XMN_WIDTH_INC            XmNwidthInc
  6176.  
  6177.         <SHELL_WIDGET_CLASS>
  6178.  
  6179.     :XMN_MIN_ASPECT_X        XmNminAspectX
  6180.  
  6181.         <SHELL_WIDGET_CLASS>
  6182.  
  6183.     :XMN_MAX_ASPECT_X        XmNmaxAspectX
  6184.  
  6185.         <SHELL_WIDGET_CLASS>
  6186.  
  6187.     :XMN_ICON_X            XmNiconX
  6188.  
  6189.         <SHELL_WIDGET_CLASS>
  6190.  
  6191. #endif /* MOTIF_1.1 */
  6192.  
  6193. ______________________________________________________________________________
  6194.  
  6195. #ifdef MOTIF_1.1
  6196. ** XmRVerticalInt: [MOTIF 1.1 only]
  6197.  
  6198. *** Type Information:
  6199.  
  6200.     Resource representation type XmRVerticalInt corresponds to
  6201.     WINTERP-Lisp type FIXNUM. On architectures where the range of type
  6202.     'long' is different from the range of type 'int', FIXNUM values
  6203.     exceeding the minimum and maximum 'int' limits will cause XLISP to
  6204.     signal an error.
  6205.  
  6206.     If you specify a string as the value of an XmRVerticalInt, Motif
  6207.     1.1 will automatically convert the string to a vertical axis
  6208.     size or position using Motif's "resolution independence"
  6209.     capabilities. For more information on resolution independence, see
  6210.     the :XMN_UNIT_TYPE (XmNunitType) resource description in the manual
  6211.     pages for XmGadget(3X), XmManager(3X), and XmPrimitive(3X). Also see the
  6212.     :XMN_SHELL_UNIT_TYPE (XmNshellUnitType) resource description in
  6213.     VendorShell(3X).
  6214.  
  6215.  
  6216. *** Resource names and the widget classes they apply to:
  6217.  
  6218.     :XMN_BASE_HEIGHT        XmNbaseHeight
  6219.  
  6220.         <SHELL_WIDGET_CLASS>
  6221.  
  6222.     :XMN_MIN_HEIGHT            XmNminHeight
  6223.  
  6224.         <SHELL_WIDGET_CLASS>
  6225.  
  6226.     :XMN_MAX_HEIGHT            XmNmaxHeight
  6227.  
  6228.         <SHELL_WIDGET_CLASS>
  6229.  
  6230.     :XMN_HEIGHT_INC            XmNheightInc
  6231.  
  6232.         <SHELL_WIDGET_CLASS>
  6233.  
  6234.     :XMN_MIN_ASPECT_Y        XmNminAspectY
  6235.  
  6236.         <SHELL_WIDGET_CLASS>
  6237.         
  6238.     :XMN_MAX_ASPECT_Y        XmNmaxAspectY
  6239.  
  6240.         <SHELL_WIDGET_CLASS>
  6241.  
  6242.     :XMN_ICON_Y            XmNiconY
  6243.  
  6244.         <SHELL_WIDGET_CLASS>        
  6245.  
  6246. #endif /* MOTIF_1.1 */
  6247.  
  6248. ______________________________________________________________________________
  6249.  
  6250. ** XmRKeyboardFocusPolicy:
  6251.  
  6252. *** Type Information:
  6253.  
  6254.     Resource representation type XmRKeyboardFocusPolicy corresponds to an
  6255.     enumerated type. The following keyword symbols represent the valid
  6256.     WINTERP-Lisp values for this type and their associated Motif constants:
  6257.  
  6258.         :EXPLICIT        XmEXPLICIT
  6259.         :POINTER        XmPOINTER
  6260.  
  6261.     You may also specify a STRING value which will be automatically
  6262.     converted to XmRKeyboardFocusPolicy by Motif's resource converters.
  6263.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6264.  
  6265.  
  6266. *** Resource names and the widget classes they apply to:
  6267.  
  6268.     :XMN_KEYBOARD_FOCUS_POLICY    XmNkeyboardFocusPolicy
  6269.  
  6270.         <SHELL_WIDGET_CLASS> <POPUP_SHELL_WIDGET_CLASS>
  6271.  
  6272. ______________________________________________________________________________
  6273.  
  6274. ** XmRLabelType:
  6275.  
  6276. *** Type Information:
  6277.  
  6278.     Resource representation type XmRLabelType corresponds to an
  6279.     enumerated type. The following keyword symbols represent the valid
  6280.     WINTERP-Lisp values for this type and their associated Motif constants:
  6281.  
  6282.         :PIXMAP        XmPIXMAP
  6283.         :STRING        XmSTRING
  6284.  
  6285.     You may also specify a STRING value which will be automatically
  6286.     converted to XmRLabelType by Motif's resource converters.
  6287.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6288.  
  6289.  
  6290. *** Resource names and the widget classes they apply to:
  6291.  
  6292.     :XMN_LABEL_TYPE            XmNlabelType
  6293.  
  6294.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  6295.  
  6296. ______________________________________________________________________________
  6297.  
  6298. ** XmRListSizePolicy:
  6299.  
  6300. *** Type Information:
  6301.  
  6302.     Resource representation type XmRListSizePolicy corresponds to an
  6303.     enumerated type. The following keyword symbols represent the valid
  6304.     WINTERP-Lisp values for this type and their associated Motif constants:
  6305.  
  6306.         :VARIABLE        XmVARIABLE
  6307.         :CONSTANT        XmCONSTANT
  6308.         :RESIZE_IF_POSSIBLE    XmRESIZE_IF_POSSIBLE
  6309.  
  6310.     You may also specify a STRING value which will be automatically
  6311.     converted to XmRListSizePolicy by Motif's resource converters.
  6312.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6313.  
  6314.  
  6315. *** Resource names and the widget classes they apply to:
  6316.  
  6317.     :XMN_LIST_SIZE_POLICY        XmNlistSizePolicy
  6318.  
  6319.         XM_LIST_WIDGET_CLASS
  6320. ______________________________________________________________________________
  6321.  
  6322. #ifdef MOTIF_1.1
  6323. ** XmRMultiClick: [Motif 1.1 only]
  6324.  
  6325. *** Type Information:
  6326.  
  6327.     Resource representation type XmRMultiClick corresponds to an
  6328.     enumerated type. The following keyword symbols represent the valid
  6329.     WINTERP-Lisp values for this type and their associated Motif constants:
  6330.  
  6331.         :MULTICLICK_DISCARD        XmMULTICLICK_DISCARD
  6332.         :MULTICLICK_KEEP        XmMULTICLICK_KEEP
  6333.  
  6334.     You may also specify a STRING value which will be automatically
  6335.     converted to XmRMultiClick by Motif's resource converters.
  6336.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6337.  
  6338.  
  6339. *** Resource names and the widget classes they apply to:
  6340.  
  6341.     :XMN_MULTI_CLICK        XmNmultiClick
  6342.  
  6343.         XM_ARROW_BUTTON_WIDGET_CLASS XM_ARROW_BUTTON_GADGET_CLASS
  6344.         XM_DRAWN_BUTTON_WIDGET_CLASS
  6345.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  6346.  
  6347. #endif /* MOTIF_1.1 */
  6348.  
  6349. ______________________________________________________________________________
  6350.  
  6351. #ifdef MOTIF_1.1
  6352. ** XmRNavigationType: [Motif 1.1 only]
  6353.  
  6354. *** Type Information:
  6355.  
  6356.     Resource representation type XmRNavigationType corresponds to an
  6357.     enumerated type. The following keyword symbols represent the valid
  6358.     WINTERP-Lisp values for this type and their associated Motif constants:
  6359.  
  6360.         :NONE            XmNONE
  6361.         :TAB_GROUP        XmTAB_GROUP
  6362.         :STICKY_TAB_GROUP    XmSTICKY_TAB_GROUP
  6363.         :EXCLUSIVE_TAB_GROUP    XmEXCLUSIVE_TAB_GROUP
  6364.  
  6365.     You may also specify a STRING value which will be automatically
  6366.     converted to XmRNavigationType by Motif's resource converters.
  6367.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6368.  
  6369.  
  6370. *** Resource names and the widget classes they apply to:
  6371.  
  6372.     :XMN_NAVIGATION_TYPE        XmNnavigationType
  6373.  
  6374.         <GADGET_CLASS> <MANAGER_CLASS> <PRIMITIVE_CLASS>
  6375.         XM_LIST_WIDGET_CLASS XM_MAIN_WINDOW_WIDGET_CLASS
  6376.         XM_ROW_COLUMN_WIDGET_CLASS XM_SCROLL_BAR_WIDGET_CLASS
  6377.         XM_TEXT_WIDGET_CLASS XM_TEXT_FIELD_WIDGET_CLASS
  6378.  
  6379. #endif /* MOTIF_1.1 */
  6380.  
  6381. ______________________________________________________________________________
  6382.  
  6383. ** XmROrientation:
  6384.  
  6385. *** Type Information:
  6386.  
  6387.     Resource representation type XmROrientation corresponds to an
  6388.     enumerated type. The following keyword symbols represent the valid
  6389.     WINTERP-Lisp values for this type and their associated Motif constants:
  6390.  
  6391.         :NO_ORIENTATION        XmNO_ORIENTATION
  6392.         :VERTICAL        XmVERTICAL
  6393.         :HORIZONTAL        XmHORIZONTAL
  6394.  
  6395.     You may also specify a STRING value which will be automatically
  6396.     converted to XmROrientation by Motif's resource converters.
  6397.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6398.  
  6399.  
  6400. *** Resource names and the widget classes they apply to:
  6401.  
  6402.     :XMN_ORIENTATION        XmNorientation
  6403.  
  6404.         XM_ROW_COLUMN_WIDGET_CLASS XM_SCALE_WIDGET_CLASS
  6405.         XM_SCROLL_BAR_WIDGET_CLASS
  6406.         XM_SEPARATOR_GADGET_CLASS XM_SEPARATOR_WIDGET_CLASS
  6407. ______________________________________________________________________________
  6408.  
  6409. ** XmRPacking:
  6410.  
  6411. *** Type Information:
  6412.  
  6413.     Resource representation type XmRPacking corresponds to an
  6414.     enumerated type. The following keyword symbols represent the valid
  6415.     WINTERP-Lisp values for this type and their associated Motif constants:
  6416.  
  6417.         :NO_PACKING        XmNO_PACKING
  6418.         :PACK_TIGHT        XmPACK_TIGHT
  6419.         :PACK_COLUMN        XmPACK_COLUMN
  6420.         :PACK_NONE        XmPACK_NONE
  6421.  
  6422.     You may also specify a STRING value which will be automatically
  6423.     converted to XmRPacking by Motif's resource converters.
  6424.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6425.  
  6426.  
  6427. *** Resource names and the widget classes they apply to:
  6428.  
  6429.     :XMN_PACKING            XmNpacking
  6430.  
  6431.         XM_ROW_COLUMN_WIDGET_CLASS
  6432. ______________________________________________________________________________
  6433.  
  6434. ** XmRPixel:
  6435.  
  6436. *** Type Information:
  6437.  
  6438.     Resource representation type XmRPixel corresponds to the
  6439.     WINTERP-Lisp atomic type PIXEL, which is X's way of representing
  6440.     a color.
  6441.  
  6442.     One may set XmRPixel resources by specifying a STRING color name,
  6443.     just as you would in $HOME/.Xdefaults. Alternatively, one can use
  6444.     the result of primitive    X_ALLOC_COLOR,
  6445.     X_STORE_COLOR/X_ALLOC_N_COLOR_CELLS_NO_PLANES, or the result of
  6446.     :get_values on the XmRPixel resource of another widget.
  6447.  
  6448.  
  6449. *** Resource names and the widget classes they apply to:
  6450.  
  6451.     :XMN_FOREGROUND            XmNforeground
  6452.  
  6453.         <MANAGER_WIDGET_CLASS> <PRIMITIVE_WIDGET_CLASS>
  6454.  
  6455.     :XMN_BACKGROUND            XmNbackground
  6456.  
  6457.         <MANAGER_WIDGET_CLASS> <PRIMITIVE_WIDGET_CLASS> <WIDGET_CLASS>
  6458.  
  6459.     :XMN_HIGHLIGHT_COLOR        XmNhighlightColor
  6460.  
  6461.         <MANAGER_WIDGET_CLASS> <PRIMITIVE_WIDGET_CLASS>
  6462.  
  6463.     :XMN_TOP_SHADOW_COLOR        XmNtopShadowColor
  6464.  
  6465.         <MANAGER_WIDGET_CLASS> <PRIMITIVE_WIDGET_CLASS>
  6466.  
  6467.     :XMN_BOTTOM_SHADOW_COLOR    XmNbottomShadowColor
  6468.  
  6469.         <MANAGER_WIDGET_CLASS> <PRIMITIVE_WIDGET_CLASS>
  6470.  
  6471.     :XMN_ARM_COLOR            XmNarmColor
  6472.  
  6473.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  6474.  
  6475.    #ifdef MOTIF_1.1
  6476.     :XMN_TROUGH_COLOR        XmNtroughColor
  6477.  
  6478.         XM_SCROLL_BAR_WIDGET_CLASS
  6479.    #endif /* MOTIF_1.1 */
  6480.  
  6481.     :XMN_SELECT_COLOR        XmNselectColor
  6482.  
  6483.         XM_TOGGLE_BUTTON_WIDGET_CLASS XM_TOGGLE_BUTTON_GADGET_CLASS
  6484.  
  6485.     :XMN_BORDER_COLOR        XmNborderColor
  6486.  
  6487.         <WIDGET_CLASS>
  6488.  
  6489. ______________________________________________________________________________
  6490.  
  6491. ** XmRPixmap, XmRPrimForegroundPixmap, XmRManForegroundPixmap, XmRPrimHighlightPixmap, XmRManHighlightPixmap:
  6492.  
  6493. *** Type Information:
  6494.  
  6495.     Resource representation type XmR*Pixmap corresponds to the
  6496.     WINTERP-Lisp atomic type PIXMAP as returned by primitive
  6497.     XM_GET_PIXMAP. Pixmaps are used by widgets to display
  6498.     graphical images.
  6499.     
  6500.     One may set Pixmap resources by specifying the STRING name of
  6501.     the pixmap. Pixmaps get named by "installing" an XImage with an
  6502.     associated name by using primitive XM_INSTALL_IMAGE. If a named
  6503.     pixmap cannot be found, then the pixmap name is taken as a filename
  6504.     for an X10 or X11 bitmap file. The pixmap name must either have a
  6505.     fully qualified path-name, or be on the    file path specified by
  6506.     environment variable XBMLANGPATH, or must be in Motif's default
  6507.     pixmap search path. For more information, see the documentation for
  6508.     XmGetPixmap(X).
  6509.  
  6510.     Additionally, Motif defines the following preinstalled pixmap
  6511.     names: "background", "25_foreground", "50_foreground",
  6512.     "75_foreground", "vertical", "horizontal", "slant_right",
  6513.     "slant_left", "menu_cascade", and "menu_checkmark".
  6514.     
  6515.     Note that if you specify a string value for a pixmap at
  6516.     widget-creation time, Motif's string --> pixmap converters may
  6517.     retrieve the wrong colors for the pixmap -- you'll get back a
  6518.     pixmap using the default foreground, background, and highlight
  6519.     colors of *TOPLEVEL_WIDGET*. If you set a pixmap resource via
  6520.     :SET_VALUES, the pixmap will use the widget manager's foreground
  6521.     and background colors. If these default colors are not appropriate,
  6522.     you should set pixmap resources to the result of primitive XM_GET_PIXMAP.
  6523.  
  6524.  
  6525. *** Garbage Collection of Pixmaps:
  6526.  
  6527.     Unused pixmaps are garbage collected by WINTERP -- if no
  6528.     references to them exist in any WIDGETOBJ or other WINTERP-XLISP
  6529.     variable, their server and client-side storage will get reclaimed.
  6530.     In other words, PIXMAPs do what you'd expect them to do in a Lispy
  6531.     garbage    collected system. This is certainly useful and good to do
  6532.     because we can expect pixmaps to take up a reasonable amount of
  6533.     client and server space -- we should be efficient about their use,
  6534.     especially because Motif has made it easy to do so.
  6535.  
  6536.     Motif provides an explicit function XmDestroyPixmap() to deallocate
  6537.     unused pixmaps. Unfortunately, it is often difficult for a user to know
  6538.     when a pixmap is no longer being used. If a user calls
  6539.     XmDestroyPixmap() on a pixmap that is still being used by a widget, 
  6540.     a guaranteed coredump will result due to an "X Protocol Error".
  6541.     Therefore, WINTERP provides no interface to XmDestroyPixmap();
  6542.     instead it extends XLISP's mark/sweep garbage collector to use
  6543.     the reference counting and pixmap cacheing scheme of
  6544.     XmGetPixmap() and XmDestroyPixmap().
  6545.  
  6546.     Unfortunately, the XImage* behind the pixmap still persists
  6547.     even if all pixmaps based on a particular Ximage no longer exist.
  6548.     Since XImages can be implicitly created inside XmGetPixmap(), or
  6549.     through a String-->Xm*Pixmap* conversion it will be very hard to
  6550.     get a hold of the actual XImage pointer when all we have access to
  6551.     are the name-strings of the previously installed images or the
  6552.     filenames of new images installed.  Either we'll have to prevent
  6553.     creating cached XImages inside XmGetPixmap() and the
  6554.     XmString-->Xm*Pixmap* converters, and do all this ourselves, or we
  6555.     can just punt. I'm going to punt on the harder problem, and let
  6556.     people that care about this use the primitives XM_INSTALL_IMAGE
  6557.     XM_UNINSTALL_IMAGE.
  6558.  
  6559.     Rather than having XmGetPixmap() or the String-->Xm*Pixmap*
  6560.     converters implicitly create XImage's, you should pre-create
  6561.     the necessary <XImage_obj> by using
  6562.     XM_INSTALL_IMAGE(XM_GET_IMAGE_FROM_FILE(<image_file_name>)) at
  6563.     application startup time. Later, you may explicitly destroy the
  6564.     <XImage_obj> via primitive XM_UNINSTALL_IMAGE when the XImage is no
  6565.     longer needed.    Destroying an XImage after creating the    necessary
  6566.     pixmaps from it    shouldn't cause any protocol errors, so    this is the
  6567.     thing to do.
  6568.  
  6569.  
  6570. *** Resource names and the widget classes they apply to:
  6571.  
  6572.  
  6573.     :XMN_ICON_PIXMAP        XmNiconPixmap
  6574.  
  6575.         <SHELL_WIDGET_CLASS> -- XmRPixmap
  6576.  
  6577.     :XMN_ICON_MASK            XmNiconMask
  6578.  
  6579.         <SHELL_WIDGET_CLASS> -- XmRPixmap
  6580.  
  6581.     :XMN_BACKGROUND_PIXMAP        XmNbackgroundPixmap
  6582.  
  6583.         <WIDGET_CLASS> -- XmRPixmap
  6584.         <XM_MANAGER_WIDGET_CLASS> -- XmRXmBackgroundPixmap
  6585.         <XM_PRIMITIVE_WIDGET_CLASS> -- XmRXmBackgroundPixmap
  6586.  
  6587.     :XMN_BORDER_PIXMAP        XmNborderPixmap
  6588.  
  6589.         <WIDGET_CLASS> -- XmRPixmap
  6590.  
  6591.     :XMN_LABEL_INSENSITIVE_PIXMAP    XmNlabelInsensitivePixmap
  6592.  
  6593.         XM_LABEL_WIDGET_CLASS -- XmRPixmap
  6594.         XM_LABEL_GADGET_CLASS -- XmRGadgetPixmap
  6595.  
  6596.     :XMN_SELECT_INSENSITIVE_PIXMAP    XmNselectInsensitivePixmap
  6597.  
  6598.         XM_TOGGLE_BUTTON_GADGET_CLASS -- XmRPixmap
  6599.         XM_TOGGLE_BUTTON_WIDGET_CLASS -- XmRGadgetPixmap
  6600.  
  6601.     :XMN_SELECT_PIXMAP        XmNselectPixmap
  6602.  
  6603.         XM_TOGGLE_BUTTON_WIDGET_CLASS -- XmRPrimForegroundPixmap;
  6604.         XM_TOGGLE_BUTTON_GADGET_CLASS -- XmRPixmap
  6605.  
  6606.     :XMN_CASCADE_PIXMAP        XmNcascadePixmap
  6607.  
  6608.         XM_CASCADE_BUTTON_WIDGET_CLASS -- XmRPrimForegroundPixmap
  6609.         XM_CASCADE_BUTTON_GADGET_CLASS -- XmRGadgetPixmap
  6610.  
  6611.     :XMN_LABEL_PIXMAP        XmNlabelPixmap
  6612.  
  6613.         XM_LABEL_WIDGET_CLASS -- XmRPrimForegroundPixmap
  6614.         XM_LABEL_GADGET_CLASS -- XmRManForegroundPixmap
  6615.  
  6616.     :XMN_HIGHLIGHT_PIXMAP        XmNhighlightPixmap
  6617.  
  6618.         <XM_PRIMITIVE_WIDGET_CLASS> -- XmRPrimHighlightPixmap
  6619.         <XM_MANAGER_WIDGET_CLASS> -- XmRManHighlightPixmap
  6620.  
  6621.     :XMN_ARM_PIXMAP            XmNarmPixmap
  6622.  
  6623.         XM_PUSH_BUTTON_WIDGET_CLASS -- XmRPrimForegroundPixmap
  6624.         XM_PUSH_BUTTON_GADGET_CLASS -- XmRGadgetPixmap
  6625.  
  6626.     :XMN_SYMBOL_PIXMAP        XmNsymbolPixmap
  6627.  
  6628.         XM_MESSAGE_BOX_WIDGET_CLASS -- XmRManForegroundPixmap
  6629.  
  6630.     :XMN_TOP_SHADOW_PIXMAP        XmNtopShadowPixmap
  6631.  
  6632.         <XM_PRIMITIVE_WIDGET_CLASS> -- XmRPrimTopShadowPixmap;
  6633.         <XM_MANAGER_WIDGET_CLASS> -- XmRManTopShadowPixmap
  6634.  
  6635.     :XMN_BOTTOM_SHADOW_PIXMAP    XmNbottomShadowPixmap
  6636.  
  6637.         <XM_PRIMITIVE_WIDGET_CLASS> -- XmRPrimBottomShadowPixmap;
  6638.         <XM_MANAGER_WIDGET_CLASS> -- XmRManBottomShadowPixmap
  6639.  
  6640. ______________________________________________________________________________
  6641.  
  6642. #ifdef MOTIF_1.0
  6643. ** XmRPosition: [Motif 1.0 only]
  6644.  
  6645. *** Type Information:
  6646.  
  6647.     Resource representation type XmRPosition corresponds to
  6648.     WINTERP-Lisp type FIXNUM. Note that on some architectures, 
  6649.     WINTERP will signal an XLISP error if the FIXNUM is too
  6650.     large or too small of an integer.
  6651.  
  6652.     You may also specify a STRING value which will be automatically
  6653.     converted to XmRPosition by Motif's resource converters.
  6654.  
  6655.  
  6656. *** Resource names and the widget classes they apply to:
  6657.  
  6658.     :XMN_X                XmNx
  6659.  
  6660.         <WIDGET_CLASS> <SHELL_WIDGET_CLASS>
  6661.  
  6662.     :XMN_Y                XmNy
  6663.  
  6664.         <WIDGET_CLASS> <SHELL_WIDGET_CLASS>
  6665.  
  6666.     :XMN_SASH_INDENT        XmNsashIndent
  6667.  
  6668.         XM_PANED_WINDOW_WIDGET_CLASS
  6669.  
  6670. #endif /* MOTIF_1.0 */
  6671.  
  6672. ______________________________________________________________________________
  6673.  
  6674. #ifdef MOTIF_1.1
  6675. ** XmRHorizontalPosition: [Motif 1.1 only]
  6676.  
  6677. *** Type Information:
  6678.  
  6679.     Resource representation type XmRHorizontalPosition corresponds to
  6680.     WINTERP-Lisp type FIXNUM. Note that on some architectures, 
  6681.     WINTERP will signal an XLISP error if the FIXNUM is too
  6682.     large or too small of an integer.
  6683.  
  6684.     If you specify a string as the value of an XmRHorizontalPosition, Motif
  6685.     1.1 will automatically convert the string to a horizontal axis position
  6686.     using Motif's "resolution independence"    capabilities. For more
  6687.     information on resolution independence, see the :XMN_UNIT_TYPE
  6688.     (XmNunitType) resource description in the manual pages for XmGadget(3X),
  6689.     XmManager(3X), and XmPrimitive(3X). Also see the :XMN_SHELL_UNIT_TYPE
  6690.     (XmNshellUnitType) resource description in VendorShell(3X).
  6691.  
  6692. *** Resource names and the widget classes they apply to:
  6693.  
  6694.     :XMN_X                XmNx
  6695.  
  6696.         <WIDGET_CLASS> <SHELL_WIDGET_CLASS>
  6697.  
  6698.     :XMN_SASH_INDENT        XmNsashIndent
  6699.  
  6700.         XM_PANED_WINDOW_WIDGET_CLASS
  6701.  
  6702. #endif /* MOTIF_1.1 */
  6703.  
  6704. ______________________________________________________________________________
  6705.  
  6706. #ifdef MOTIF_1.1
  6707. ** XmRVerticalPosition: [Motif 1.1 only]
  6708.  
  6709. *** Type Information:
  6710.  
  6711.     Resource representation type XmRVerticalPosition corresponds to
  6712.     WINTERP-Lisp type FIXNUM. Note that on some architectures, 
  6713.     WINTERP will signal an XLISP error if the FIXNUM is too
  6714.     large or too small of an integer.
  6715.  
  6716.     If you specify a string as the value of an XmRVerticalPosition, Motif
  6717.     1.1 will automatically convert the string to a vertical axis position
  6718.     using Motif's "resolution independence"    capabilities. For more
  6719.     information on resolution independence, see the :XMN_UNIT_TYPE
  6720.     (XmNunitType) resource description in the manual pages for XmGadget(3X),
  6721.     XmManager(3X), and XmPrimitive(3X). Also see the :XMN_SHELL_UNIT_TYPE
  6722.     (XmNshellUnitType) resource description in VendorShell(3X).
  6723.  
  6724. *** Resource names and the widget classes they apply to:
  6725.  
  6726.     :XMN_Y                XmNy
  6727.  
  6728.         <WIDGET_CLASS> <SHELL_WIDGET_CLASS>
  6729.  
  6730. #endif /* MOTIF_1.1 */
  6731.  
  6732. ______________________________________________________________________________
  6733.  
  6734. ** XmRProcessingDirection:
  6735.  
  6736. *** Type Information:
  6737.  
  6738.     Resource representation type XmRProcessingDirection corresponds to an
  6739.     enumerated type. The following keyword symbols represent the valid
  6740.     WINTERP-Lisp values for this type and their associated Motif constants:
  6741.  
  6742.         :MAX_ON_TOP        XmMAX_ON_TOP
  6743.         :MAX_ON_BOTTOM        XmMAX_ON_BOTTOM
  6744.         :MAX_ON_LEFT        XmMAX_ON_LEFT
  6745.         :MAX_ON_RIGHT        XmMAX_ON_RIGHT
  6746.  
  6747.     You may also specify a STRING value which will be automatically
  6748.     converted to XmRProcessingDirection by Motif's resource converters.
  6749.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6750.  
  6751.    #ifdef MOTIF_1.0
  6752.     Note -- :GET_VALUES on a horizontally oriented scale or
  6753.     scrollbar widget will return :MAX_ON_TOP or :MAX_ON_BOTTOM instead of
  6754.     :MAX_ON_LEFT and :MAX_ON_RIGHT. This is due to a bug in Motif 1.0.
  6755.    #else
  6756.     The problem above has been fixed in Motif 1.1.
  6757.    #endif /* MOTIF_1.0 */
  6758.  
  6759. *** Resource names and the widget classes they apply to:
  6760.  
  6761.     :XMN_PROCESSING_DIRECTION    XmNprocessingDirection
  6762.  
  6763.         XM_SCALE_WIDGET_CLASS XM_SCROLL_BAR_WIDGET_CLASS
  6764.  
  6765. ______________________________________________________________________________
  6766.  
  6767. ** XmRResizePolicy:
  6768.  
  6769. *** Type Information:
  6770.  
  6771.     Resource representation type XmRResizePolicy corresponds to an
  6772.     enumerated type. The following keyword symbols represent the valid
  6773.     WINTERP-Lisp values for this type and their associated Motif constants:
  6774.  
  6775.         :RESIZE_NONE        XmRESIZE_NONE
  6776.         :RESIZE_GROW        XmRESIZE_GROW
  6777.         :RESIZE_ANY        XmRESIZE_ANY
  6778.  
  6779.     You may also specify a STRING value which will be automatically
  6780.     converted to XmRResizePolicy by Motif's resource converters.
  6781.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6782.  
  6783.  
  6784. *** Resource names and the widget classes they apply to:
  6785.  
  6786.     :XMN_RESIZE_POLICY        XmNresizePolicy
  6787.  
  6788.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_COMMAND_WIDGET_CLASS
  6789.         XM_DRAWING_AREA_WIDGET_CLASS
  6790. ______________________________________________________________________________
  6791.  
  6792. ** XmRRowColumnType:
  6793.  
  6794. *** Type Information:
  6795.  
  6796.     Resource representation type XmRRowColumnType corresponds to an
  6797.     enumerated type. The following keyword symbols represent the valid
  6798.     WINTERP-Lisp values for this type and their associated Motif constants:
  6799.  
  6800.         :WORK_AREA    XmWORK_AREA
  6801.         :MENU_BAR    XmMENU_BAR
  6802.         :MENU_POPUP    XmMENU_POPUP
  6803.         :MENU_PULLDOWN    XmMENU_PULLDOWN
  6804.         :MENU_OPTION    XmMENU_OPTION
  6805.  
  6806.     You may also specify a STRING value which will be automatically
  6807.     converted to XmRRowColumnType by Motif's resource converters.
  6808.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6809.  
  6810.  
  6811. *** Resource names and the widget classes they apply to:
  6812.  
  6813.     :XMN_ROW_COLUMN_TYPE        XmNrowColumnType
  6814.  
  6815.         XM_ROW_COLUMN_WIDGET_CLASS
  6816. ______________________________________________________________________________
  6817.  
  6818. ** XmRScrollBarDisplayPolicy:
  6819.  
  6820. *** Type Information:
  6821.  
  6822.     Resource representation type XmRScrollBarDisplayPolicy corresponds to an
  6823.     enumerated type. The following keyword symbols represent the valid
  6824.     WINTERP-Lisp values for this type and their associated Motif constants:
  6825.  
  6826.         :STATIC            XmSTATIC
  6827.         :AS_NEEDED        XmAS_NEEDED
  6828.  
  6829.     You may also specify a STRING value which will be automatically
  6830.     converted to XmRScrollBarDisplayPolicy by Motif's resource converters.
  6831.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6832.  
  6833. *** Resource names and the widget classes they apply to:
  6834.  
  6835.     :XMN_SCROLL_BAR_DISPLAY_POLICY    XmNscrollBarDisplayPolicy
  6836.  
  6837.         XM_LIST_WIDGET_CLASS XM_SCROLLED_WINDOW_WIDGET_CLASS
  6838.  
  6839. ______________________________________________________________________________
  6840.  
  6841. ** XmRScrollBarPlacement:
  6842.  
  6843. *** Type Information:
  6844.  
  6845.     Resource representation type XmRScrollBarPlacement corresponds to an
  6846.     enumerated type. The following keyword symbols represent the valid
  6847.     WINTERP-Lisp values for this type and their associated Motif constants:
  6848.  
  6849.         :TOP_LEFT        XmTOP_LEFT
  6850.         :BOTTOM_LEFT        XmBOTTOM_LEFT
  6851.         :TOP_RIGHT        XmTOP_RIGHT
  6852.         :BOTTOM_RIGHT        XmBOTTOM_RIGHT
  6853.  
  6854.     You may also specify a STRING value which will be automatically
  6855.     converted to XmRScrollBarPlacement by Motif's resource converters.
  6856.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6857.  
  6858.  
  6859. *** Resource names and the widget classes they apply to:
  6860.  
  6861.     :XMN_SCROLL_BAR_PLACEMENT    XmNscrollBarPlacement
  6862.  
  6863.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  6864.  
  6865. ______________________________________________________________________________
  6866.  
  6867. ** XmRScrollingPolicy:
  6868.  
  6869. *** Type Information:
  6870.  
  6871.     Resource representation type XmRScrollingPolicy corresponds to an
  6872.     enumerated type. The following keyword symbols represent the valid
  6873.     WINTERP-Lisp values for this type and their associated Motif constants:
  6874.  
  6875.         :AUTOMATIC        XmAUTOMATIC
  6876.         :APPLICATION_DEFINED    XmAPPLICATION_DEFINED
  6877.  
  6878.     You may also specify a STRING value which will be automatically
  6879.     converted to XmRScrollingPolicy by Motif's resource converters.
  6880.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6881.  
  6882.  
  6883. *** Resource names and the widget classes they apply to:
  6884.  
  6885.     :XMN_SCROLLING_POLICY        XmNscrollingPolicy
  6886.  
  6887.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  6888. ______________________________________________________________________________
  6889.  
  6890. ** XmRSelectionArray:
  6891.  
  6892. *** Type Information:
  6893.  
  6894.     Resource representation type XmRSelectionArray corresponds to an
  6895.     array or list containing the following keyword symbols. The
  6896.     first keyword symbol represents the XmText/XmTextField selection that is
  6897.     done on the first mouse click, the second keyword represents the
  6898.     selection done for two mouse clicks, etc. The following keyword
  6899.     symbols represent the valid WINTERP-Lisp values for this type and
  6900.     their associated Motif constants:
  6901.  
  6902.         :SELECT_POSITION    XmSELECT_POSITION
  6903.         :SELECT_WHITESPACE    XmSELECT_WHITESPACE
  6904.         :SELECT_WORD        XmSELECT_WORD
  6905.         :SELECT_LINE        XmSELECT_LINE
  6906.         :SELECT_ALL        XmSELECT_ALL
  6907.         #ifdef MOTIF_1.1
  6908.         :SELECT_PARAGRAPH    XmSELECT_PARAGRAPH
  6909.         #endif /* MOTIF_1.1 */
  6910.  
  6911.     You may also specify a STRING value which will be automatically
  6912.     converted to XmRSelectionPolicy by Motif's resource converters.
  6913.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6914.  
  6915. *** Resource names and the widget classes they apply to:
  6916.  
  6917.     :XMN_SELECTION_ARRAY        XmNselectionArray
  6918.  
  6919.         XM_TEXT_WIDGET_CLASS
  6920.         #ifdef MOTIF_1.1
  6921.         XM_TEXT_FIELD_WIDGET_CLASS
  6922.         #endif /* MOTIF_1.1 */
  6923.  
  6924.         Note -- if you set resource :XMN_SELECTION_ARRAY, make 
  6925.         sure you also set resource :XMN_SELECTION_ARRAY_COUNT to
  6926.         EXACTLY the number of items in the selection array.
  6927. ______________________________________________________________________________
  6928.  
  6929. ** XmRSelectionPolicy:
  6930.  
  6931. *** Type Information:
  6932.  
  6933.     Resource representation type XmRSelectionPolicy corresponds to an
  6934.     enumerated type. The following keyword symbols represent the valid
  6935.     WINTERP-Lisp values for this type and their associated Motif constants:
  6936.  
  6937.         :SINGLE_SELECT        XmSINGLE_SELECT
  6938.         :MULTIPLE_SELECT    XmMULTIPLE_SELECT
  6939.         :EXTENDED_SELECT    XmEXTENDED_SELECT
  6940.         :BROWSE_SELECT        XmBROWSE_SELECT
  6941.  
  6942.     You may also specify a STRING value which will be automatically
  6943.     converted to XmRSelectionPolicy by Motif's resource converters.
  6944.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6945.  
  6946.  
  6947. *** Resource names and the widget classes they apply to:
  6948.  
  6949.     :XMN_SELECTION_POLICY        XmNselectionPolicy
  6950.  
  6951.         XM_LIST_WIDGET_CLASS
  6952.  
  6953. ______________________________________________________________________________
  6954.  
  6955. ** XmRSeparatorType:
  6956.  
  6957. *** Type Information:
  6958.  
  6959.     Resource representation type XmRSeparatorType corresponds to an
  6960.     enumerated type. The following keyword symbols represent the valid
  6961.     WINTERP-Lisp values for this type and their associated Motif constants:
  6962.  
  6963.         :NO_LINE        XmNO_LINE
  6964.         :SINGLE_LINE        XmSINGLE_LINE
  6965.         :DOUBLE_LINE        XmDOUBLE_LINE
  6966.         :SINGLE_DASHED_LINE    XmSINGLE_DASHED_LINE
  6967.         :DOUBLE_DASHED_LINE    XmDOUBLE_DASHED_LINE
  6968.         :SHADOW_ETCHED_IN    XmSHADOW_ETCHED_IN
  6969.         :SHADOW_ETCHED_OUT    XmSHADOW_ETCHED_OUT
  6970.  
  6971.     You may also specify a STRING value which will be automatically
  6972.     converted to XmRSeparatorType by Motif's resource converters.
  6973.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6974.  
  6975.  
  6976. *** Resource names and the widget classes they apply to:
  6977.  
  6978.     :XMN_SEPARATOR_TYPE        XmNseparatorType
  6979.  
  6980.         XM_SEPARATOR_GADGET_CLASS XM_SEPARATOR_WIDGET_CLASS
  6981. ______________________________________________________________________________
  6982.  
  6983. ** XmRShadowType:
  6984.  
  6985. *** Type Information:
  6986.  
  6987.     Resource representation type XmRShadowType corresponds to an
  6988.     enumerated type. The following keyword symbols represent the valid
  6989.     WINTERP-Lisp values for this type and their associated Motif constants:
  6990.  
  6991.         :SHADOW_ETCHED_IN    XmSHADOW_ETCHED_IN
  6992.         :SHADOW_ETCHED_OUT    XmSHADOW_ETCHED_OUT
  6993.         :SHADOW_IN        XmSHADOW_IN
  6994.         :SHADOW_OUT        XmSHADOW_OUT
  6995.  
  6996.     You may also specify a STRING value which will be automatically
  6997.     converted to XmRShadowType by Motif's resource converters.
  6998.     These values would be the same as one would specify in $HOME/.Xdefaults.
  6999.  
  7000.  
  7001. *** Resource names and the widget classes they apply to:
  7002.  
  7003.     :XMN_SHADOW_TYPE        XmNshadowType
  7004.  
  7005.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_DRAWN_BUTTON_WIDGET_CLASS
  7006.         XM_FRAME_WIDGET_CLASS
  7007.  
  7008. ______________________________________________________________________________
  7009.  
  7010. ** XmRShort:
  7011.  
  7012. *** Type Information:
  7013.  
  7014.     Resource representation type XmRShort corresponds to
  7015.     WINTERP-Lisp type FIXNUM. Note that on some architectures, 
  7016.     WINTERP will signal an XLISP error if the FIXNUM is too
  7017.     large or too small of an integer.
  7018.  
  7019.     You may also specify a STRING value which will be automatically
  7020.     converted to XmRShort by Motif's resource converters.
  7021.  
  7022.  
  7023. *** Resource names and the widget classes they apply to:
  7024.  
  7025.     :XMN_NUM_COLUMNS        XmNnumColumns
  7026.  
  7027.         XM_ROW_COLUMN_WIDGET_CLASS
  7028.  
  7029.     :XMN_DECIMAL_POINTS        XmNdecimalPoints
  7030.  
  7031.         XM_SCALE_WIDGET_CLASS
  7032.  
  7033.     :XMN_TEXT_COLUMNS        XmNtextColumns
  7034.  
  7035.         XM_SELECTION_BOX_WIDGET_CLASS
  7036.  
  7037.     :XMN_COLUMNS            XmNcolumns
  7038.  
  7039.         XM_TEXT_WIDGET_CLASS
  7040.        #ifdef MOTIF_1.1
  7041.         XM_TEXT_FIELD_WIDGET_CLASS
  7042.        #endif /* MOTIF_1.1 */
  7043.  
  7044.     :XMN_ROWS            XmNrows
  7045.  
  7046.         XM_TEXT_WIDGET_CLASS
  7047.  
  7048.    #ifdef MOTIF_1.0
  7049.  
  7050.     :XMN_SHADOW_THICKNESS        XmNshadowThickness
  7051.  
  7052.         XM_BULLETIN_BOARD_WIDGET_CLASS
  7053.         XM_CASCADE_BUTTON_WIDGET_CLASS XM_CASCADE_BUTTON_GADGET_CLASS
  7054.         XM_DRAWN_BUTTON_WIDGET_CLASS <XM_GADGET_CLASS>
  7055.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7056.         <XM_MANAGER_WIDGET_CLASS> <XM_PRIMITIVE_WIDGET_CLASS>
  7057.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  7058.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  7059.  
  7060.     :XMN_MARGIN_WIDTH        XmNmarginWidth
  7061.  
  7062.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_DRAWING_AREA_WIDGET_CLASS
  7063.         XM_FRAME_WIDGET_CLASS
  7064.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7065.         XM_PANED_WINDOW_WIDGET_CLASS XM_TEXT_WIDGET_CLASS
  7066.  
  7067.         Note: if :get_values of :XMN_MARGIN_WIDTH on
  7068.         XM_ROW_COLUMN_WIDGET_CLASS retrieves bogus values use resource
  7069.         :XMN_RCMARGIN_WIDTH instead.
  7070.         This is may be a Motif 1.0 bug on some architectures.
  7071.  
  7072.     :XMN_MARGIN_HEIGHT        XmNmarginHeight
  7073.  
  7074.         XM_BULLETIN_BOARD_WIDGET_CLASS XM_DRAWING_AREA_WIDGET_CLASS
  7075.         XM_FRAME_WIDGET_CLASS
  7076.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7077.         XM_PANED_WINDOW_WIDGET_CLASS XM_TEXT_WIDGET_CLASS
  7078.  
  7079.         Note: if :get_values of :XMN_MARGIN_HEIGHT on
  7080.         XM_ROW_COLUMN_WIDGET_CLASS retrieves bogus values use resource
  7081.         :XMN_RCMARGIN_HEIGHT instead.
  7082.         This may be a Motif 1.0 bug on some architectures.
  7083.  
  7084.     :XMN_HIGHLIGHT_THICKNESS    XmNhighlightThickness
  7085.  
  7086.         <XM_GADGET_CLASS> <XM_PRIMITIVE_WIDGET_CLASS>
  7087.         XM_SCALE_WIDGET_CLASS
  7088.  
  7089.     :XMN_MARGIN_LEFT        XmNmarginLeft
  7090.  
  7091.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7092.  
  7093.     :XMN_MARGIN_RIGHT        XmNmarginRight
  7094.  
  7095.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7096.  
  7097.     :XMN_MARGIN_TOP            XmNmarginTop
  7098.  
  7099.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7100.  
  7101.     :XMN_MARGIN_BOTTOM        XmNmarginBottom
  7102.  
  7103.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7104.  
  7105.     :XMN_LIST_SPACING        XmNlistSpacing
  7106.  
  7107.         XM_LIST_WIDGET_CLASS
  7108.  
  7109.     :XMN_LIST_MARGIN_WIDTH        XmNlistMarginWidth
  7110.  
  7111.         XM_LIST_WIDGET_CLASS
  7112.  
  7113.     :XMN_LIST_MARGIN_HEIGHT        XmNlistMarginHeight
  7114.  
  7115.         XM_LIST_WIDGET_CLASS
  7116.  
  7117.     :XMN_MAIN_WINDOW_MARGIN_WIDTH    XmNmainWindowMarginWidth
  7118.  
  7119.         XM_MAIN_WINDOW_WIDGET_CLASS
  7120.  
  7121.     :XMN_MAIN_WINDOW_MARGIN_HEIGHT    XmNmainWindowMarginHeight
  7122.  
  7123.         XM_MAIN_WINDOW_WIDGET_CLASS
  7124.  
  7125.     :XMN_SHOW_AS_DEFAULT        XmNshowAsDefault
  7126.  
  7127.         XM_PUSH_BUTTON_WIDGET_CLASS XM_PUSH_BUTTON_GADGET_CLASS
  7128.  
  7129.     :XMN_SCROLLED_WINDOW_MARGIN_WIDTH XmNscrolledWindowMarginWidth
  7130.  
  7131.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  7132.  
  7133.     :XMN_SCROLLED_WINDOW_MARGIN_HEIGHT XmNscrolledWindowMarginHeight
  7134.  
  7135.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  7136.  
  7137.     :XMN_MARGIN            XmNmargin
  7138.  
  7139.         XM_SEPARATOR_WIDGET_CLASS XM_SEPARATOR_GADGET_CLASS
  7140.  
  7141.    #endif /* MOTIF_1.0 */
  7142.  
  7143. ______________________________________________________________________________
  7144.  
  7145. ** XmRString:
  7146.  
  7147. *** Type Information:
  7148.  
  7149.     Resource representation type XmRString corresponds to winter-Lisp
  7150.     type STRING.
  7151.  
  7152. *** Garbage Collection of strings:
  7153.  
  7154.     XLISP will reclaim storage on any STRING values that are no
  7155.     longer referenced inside WINTERP.
  7156.  
  7157.  
  7158. *** Resource names and the widget classes they apply to:
  7159.  
  7160.     :XMN_ACCELERATOR        XmNaccelerator
  7161.  
  7162.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7163.  
  7164.     :XMN_MENU_ACCELERATOR        XmNmenuAccelerator
  7165.  
  7166.         XM_ROW_COLUMN_WIDGET_CLASS
  7167.  
  7168.     :XMN_STRING            XmNvalue
  7169.  
  7170.         XM_TEXT_WIDGET_CLASS
  7171.  
  7172.         Note -- :XMN_STRING is an alias for resource XmNvalue on 
  7173.         the Motif Text Widget. Motif 1.0 & 1.1 has a bug in that it
  7174.         inconsistently declares the value associated with the
  7175.         "message" XmNvalue as 'int' for other widget classes, and
  7176.         as a 'string' for the text widget. Thus, to retrieve or
  7177.         set the string in a text widget, use this resource name,
  7178.         or use text widget methods :GET_STRING and :SET_STRING.
  7179.  
  7180.     :XMN_GEOMETRY            XmNgeometry
  7181.  
  7182.         <SHELL_WIDGET_CLASS>
  7183.  
  7184.     :XMN_TITLE            XmNtitle
  7185.  
  7186.         <SHELL_WIDGET_CLASS>
  7187.  
  7188.     :XMN_ICON_NAME            XmNiconName
  7189.  
  7190.         TOP_LEVEL_SHELL_WIDGET_CLASS TOP_LEVEL_POPUP_SHELL_WIDGET_CLASS
  7191.  
  7192.     :XMN_MWM_MENU            XmNmwmMenu
  7193.  
  7194.         <SHELL_WIDGET_CLASS>
  7195.  
  7196.     #ifdef MOTIF_1.1
  7197.     :XMN_MNEMONIC_CHAR_SET        XmNmnemonicCharSet
  7198.  
  7199.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7200.         XM_ROW_COLUMN_WIDGET_CLASS
  7201.  
  7202.         Note -- :XMN_MNEMONIC_CHAR_SET is to be set to a CharSet
  7203.         value for Motif. Example values would be "", which is
  7204.         equivalent to the C Motif constant XmSTRING_DEFAULT_CHARSET;
  7205.         another typical    value is "ISO8859-1", which is equivalent
  7206.         to the C Motif constants XmSTRING_ISO8859_1, XmSTRING_OS_CHARSET,
  7207.         and XmFALLBACK_CHARSET. For Motif 1.1, potential values for
  7208.         <charset> are: "" (default) "ISO8859-1" "ISO8859-2"
  7209.         "ISO8859-3" "ISO8859-4" "ISO8859-5" "ISO8859-6"    "ISO8859-7"
  7210.         "ISO8859-8" "ISO8859-9" "JISX0201.1976-0"
  7211.         "GB2312.1980-0" "GB2312.1980-1" "JISX0208.1983-0"
  7212.         "JISX0208.1983-1" "KSC5601.1987-0" "KSC5601.1987-1"
  7213.  
  7214.     :XMN_MENU_POST            XmNmenuPost
  7215.  
  7216.         XM_ROW_COLUMN_WIDGET_CLASS
  7217.     #endif /* MOTIF_1.1 */
  7218.  
  7219. ______________________________________________________________________________
  7220.  
  7221. ** XmRStringDirection:
  7222.  
  7223. *** Type Information:
  7224.  
  7225.     Resource representation type XmRStringDirection corresponds to an
  7226.     enumerated type. The following keyword symbols represent the valid
  7227.     WINTERP-Lisp values for this type and their associated Motif constants:
  7228.  
  7229.         :STRING_DIRECTION_L_TO_R    XmSTRING_DIRECTION_L_TO_R
  7230.         :STRING_DIRECTION_R_TO_L    XmSTRING_DIRECTION_R_TO_L
  7231.  
  7232.     You may also specify a STRING value which will be automatically
  7233.     converted to XmRStringDirection by Motif's resource converters.
  7234.     These values would be the same as one would specify in $HOME/.Xdefaults.
  7235.  
  7236.  
  7237. *** Resource names and the widget classes they apply to:
  7238.  
  7239.     :XMN_STRING_DIRECTION        XmNstringDirection
  7240.  
  7241.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS XM_LIST_WIDGET_CLASS
  7242.         #ifdef MOTIF_1.0
  7243.         XM_BULLETIN_BOARD_WIDGET_CLASS
  7244.         #endif /* MOTIF_1.0 */
  7245.         #ifdef MOTIF_1.1
  7246.         <XM_MANAGER_WIDGET_CLASS>
  7247.         #endif /* MOTIF_1.1 */
  7248.  
  7249. ______________________________________________________________________________
  7250.  
  7251. ** XmRStringTable:
  7252.  
  7253. *** Type Information:
  7254.  
  7255.     One may set an XmRStringTable resource by passing a
  7256.     ARRAY or LIST of STRINGs.
  7257.  
  7258. *** Resource names and the widget classes they apply to:
  7259.  
  7260.     #ifdef MOTIF_1.1
  7261.     :XMN_BUTTON_MNEMONIC_CHAR_SETS        XmNbuttonMnemonicCharSets
  7262.  
  7263.         <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_*>
  7264.  
  7265.         Note -- this XmCreateSimple*() resource is write-only and can
  7266.         only be set at widget-creation-time. Setting this resource
  7267.         via :SET_VALUES will do nothing, and retrieval using :GET_VALUES
  7268.         will signal an error.
  7269.     :XMN_BUTTON_ACCELERATORS        XmNbuttonAccelerators
  7270.  
  7271.         <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_*>
  7272.  
  7273.         Note -- this XmCreateSimple*() resource is write-only and can
  7274.         only be set at widget-creation-time. Setting this resource
  7275.         via :SET_VALUES will do nothing, and retrieval using :GET_VALUES
  7276.         will signal an error.
  7277.     #endif /* MOTIF_1.1 */
  7278.  
  7279.     :XMN_ARGV                XmNargv
  7280.  
  7281.         APPLICATION_SHELL_WIDGET_CLASS
  7282.  
  7283.         Note -- Although resource XmNargv takes values that are arrays
  7284.         of strings, the usual Xtoolkit b.s. strikes again because this
  7285.         resource doesn't work like normal resources with respect to
  7286.         copying values passed during creation or :SET_VALUES. Further
  7287.         Xtoolkit stupidities prevent retrieval of this resource using
  7288.         :GET_VALUES. Therefore Winterp-Resource :XMN_ARGV does not
  7289.         actually exist, instead, use the following methods:
  7290.            (send <Application_Shell_Widget_Instance> :SET_ARGV <args>)
  7291.            (send <Application_Shell_Widget_Instance> :GET_ARGV).
  7292.  
  7293. ______________________________________________________________________________
  7294.  
  7295. #ifdef MOTIF_1.1
  7296. ** XmRTextPosition: [MOTIF 1.1 only]
  7297.  
  7298. *** Type Information:
  7299.  
  7300.     Resource representation type XmRTextPosition corresponds to
  7301.     WINTERP-Lisp type FIXNUM. Only non-negative values are allowed.
  7302.     Negative values will signal an error.
  7303.  
  7304. *** Resource names and the widget classes they apply to:
  7305.  
  7306.     :XMN_TOP_CHARACTER        XmNtopCharacter
  7307.  
  7308.         XM_TEXT_WIDGET_CLASS
  7309.  
  7310.         Note: XmNtopCharacter in Motif 1.1 corresponds to resource
  7311.         XmNtopPosition from Motif 1.0. The name was changed in
  7312.         Motif 1.1.
  7313.  
  7314.     :XMN_CURSOR_POSITION        XmNcursorPosition
  7315.  
  7316.         XM_TEXT_WIDGET_CLASS XM_TEXT_FIELD_WIDGET_CLASS
  7317.  
  7318. #endif /* MOTIF_1.1 */
  7319.  
  7320. ______________________________________________________________________________
  7321.  
  7322. ** XmRTranslationTable:
  7323.  
  7324. *** Type Information:
  7325.  
  7326.     Resource representation type XmRTranslationTable corresponds to the
  7327.     atomic type XT_TRANSLATIONS as returned by primitive
  7328.     XT_PARSE_TRANSLATION_TABLE.
  7329.  
  7330.     One may set XmRTranslationTable resources by specifying a STRING
  7331.     translation table, just as you would in file $HOME/.Xdefaults.
  7332.     Alternatively, one can use the result of :get_values on another
  7333.     widget's XmRTranslationTable resource or use primitive
  7334.     XT_PARSE_TRANSLATION_TABLE as a XmRTranslationTable value.
  7335.  
  7336.     For more information on the syntax of the string representation of
  7337.     translation tables, see the X11r4 documentation "X Toolkit
  7338.     Intrinsics -- C Language Interface": "Appendix B: Translation Table
  7339.     Syntax" and "Chapter 10: Translation Management".
  7340.  
  7341.  
  7342. *** Resource names and the widget classes they apply to:
  7343.  
  7344.     :XMN_TEXT_TRANSLATIONS        XmNtextTranslations
  7345.  
  7346.         XM_BULLETIN_BOARD_WIDGET_CLASS
  7347.  
  7348.     :XMN_TRANSLATIONS        XmNtranslations
  7349.  
  7350.         <WIDGET_CLASS>
  7351.  
  7352. ______________________________________________________________________________
  7353.  
  7354. ** XmRUnitType:
  7355.  
  7356. *** Type Information:
  7357.  
  7358.     Resource representation type XmRUnitType corresponds to an
  7359.     enumerated type. The following keyword symbols represent the valid
  7360.     WINTERP-Lisp values for this type and their associated Motif constants:
  7361.  
  7362.         :PIXELS            XmPIXELS
  7363.         :100TH_MILLIMETERS    Xm100TH_MILLIMETERS
  7364.         :1000TH_INCHES        Xm1000TH_INCHES
  7365.         :100TH_POINTS        Xm100TH_POINTS
  7366.         :100TH_FONT_UNITS    Xm100TH_FONT_UNITS
  7367.  
  7368.     You may also specify a STRING value which will be automatically
  7369.     converted to XmRUnitType by Motif's resource converters.
  7370.     These values would be the same as one would specify in $HOME/.Xdefaults.
  7371.  
  7372.  
  7373. *** Resource names and the widget classes they apply to:
  7374.  
  7375.     :XMN_UNIT_TYPE            XmNunitType
  7376.  
  7377.         <XM_GADGET_CLASS> <XM_MANAGER_WIDGET_CLASS>
  7378.         <XM_PRIMITIVE_WIDGET_CLASS>
  7379.  
  7380.     :XMN_SHELL_UNIT_TYPE        XmNshellUnitType
  7381.  
  7382.         <SHELL_WIDGET_CLASS>
  7383.  
  7384. ______________________________________________________________________________
  7385.  
  7386. ** XmRVisualPolicy:
  7387.  
  7388. *** Type Information:
  7389.  
  7390.     Resource representation type XmRVisualPolicy corresponds to an
  7391.     enumerated type. The following keyword symbols represent the valid
  7392.     WINTERP-Lisp values for this type and their associated Motif constants:
  7393.  
  7394.         :VARIABLE        XmVARIABLE
  7395.         :CONSTANT        XmCONSTANT
  7396.  
  7397.     You may also specify a STRING value which will be automatically
  7398.     converted to XmRVisualPolicy by Motif's resource converters.
  7399.     These values would be the same as one would specify in $HOME/.Xdefaults.
  7400.  
  7401.  
  7402. *** Resource names and the widget classes they apply to:
  7403.  
  7404.     :XMN_VISUAL_POLICY        XmNvisualPolicy
  7405.  
  7406.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  7407.  
  7408. ______________________________________________________________________________
  7409.  
  7410. ** XmRWhichButton:
  7411.  
  7412. *** Type Information:
  7413.  
  7414.     Resource representation type XmRWhichButton corresponds to an
  7415.     enumerated type. The following keyword symbols represent the valid
  7416.     WINTERP-Lisp values for this type and their associated X constants:
  7417.  
  7418.         :BUTTON1        Button1
  7419.         :BUTTON2        Button2
  7420.         :BUTTON3        Button3
  7421.         :BUTTON4        Button4
  7422.         :BUTTON5        Button5
  7423.  
  7424.     You may also specify a STRING value which will be automatically
  7425.     converted to XmRWhichButton by Motif's resource converters.
  7426.     These values would be the same as one would specify in $HOME/.Xdefaults.
  7427.  
  7428.  
  7429. *** Resource names and the widget classes they apply to:
  7430.  
  7431.     :XMN_WHICH_BUTTON        XmNwhichButton
  7432.  
  7433.         XM_ROW_COLUMN_WIDGET_CLASS
  7434.  
  7435. ______________________________________________________________________________
  7436.  
  7437. ** "XmRWidget", XmRMenuWidget:
  7438.  
  7439. *** Type Information:
  7440.  
  7441.     Resource representation type "XmRWidget" corresponds to WINTERP-Lisp
  7442.     OBJECT type WIDGETOBJ.
  7443.  
  7444.     Note that Motif 1.0 nor the Xtoolkit define a representation type
  7445.     "XmRWidget" -- this is a fake type used for all resources that
  7446.     expect a value of type 'Widget'. In many cases,    Motif 1.0
  7447.     misdeclares such values as being of representation type    XmRWindow.
  7448.     Additionally, the fake representation type "XmRWidget" subsumes the
  7449.     type XmRMenuWidget, which is used for a few Motif resources. This
  7450.     won't matter for automatic string-->XmRWidget conversions because Motif
  7451.     doesn't provide a converters to XmRWidget, XmRMenuWidget, nor XmRWindow.
  7452.  
  7453.  
  7454. *** Garbage collection of WIDGETOBJs
  7455.  
  7456.     Every WIDGETOBJ that gets created will not be garbage collected
  7457.     until the widget is destroyed. This is needed for proper operation
  7458.     of the get-moused-widget function, and for getting back the correct
  7459.     WIDGETOBJ when a WIDGETOBJ is retrieved from the Motif Toolkit
  7460.     internals.  This could be made optional in the future because some
  7461.     memory could be saved, and garbage collection times potentially
  7462.     reduced if only the widgets that are actually being referenced in
  7463.     Lisp code are protected against g.c.
  7464.  
  7465.     When a WIDGETOBJ gets :DESTROY'd, all it's WINTERP-XLISP memory and
  7466.     resources may be garbage collected. This includes any PIXMAPs,
  7467.     CALLBACKOBJs, EVHANDLEROBJs, etc that correspond to the widget.
  7468.  
  7469.  
  7470. *** Resource names and the widget classes they apply to:
  7471.  
  7472.     #ifdef MOTIF_1.1
  7473.     :XMN_TRANSIENT_FOR        XmNtransientFor
  7474.  
  7475.         TRANSIENT_POPUP_SHELL_WIDGET_CLASS TRANSIENT_SHELL_WIDGET_CLASS
  7476.     #endif /* MOTIF_1.1 */
  7477.  
  7478.     :XMN_SUB_MENU_ID        XmNsubMenuId
  7479.  
  7480.         XM_CASCADE_BUTTON_WIDGET_CLASS XM_CASCADE_BUTTON_GADGET_CLASS
  7481.         XM_ROW_COLUMN_WIDGET_CLASS
  7482.  
  7483.         Note -- Motif (mis)declares this resource as 
  7484.         representation type XmRMenuWidget. I'm throwing it in
  7485.         with "XmRWidget" because these resources are WIDGETOBJs.
  7486.  
  7487.     :XMN_MENU_HELP_WIDGET        XmNmenuHelpWidget
  7488.  
  7489.         XM_ROW_COLUMN_WIDGET_CLASS 
  7490.         
  7491.         Note -- Motif (mis)declares this resource as 
  7492.         representation type XmRMenuWidget. I'm throwing it in
  7493.         with "XmRWidget" because these resources are WIDGETOBJs.
  7494.  
  7495.         Note -- resource name :XMN_MENU_HELP_WIDGET is defined
  7496.         only for a row column widget created with the :menu_bar
  7497.         or :simple_menu_bar option. Using this resource with other
  7498.         variants of the    row column widget is underfined and
  7499.         unguaranteed.
  7500.  
  7501.     :XMN_MENU_HISTORY        XmNmenuHistory
  7502.  
  7503.         XM_ROW_COLUMN_WIDGET_CLASS
  7504.  
  7505.         Note -- Motif (mis)declares this resource as 
  7506.         representation type XmRMenuWidget. I'm throwing it in
  7507.         with "XmRWidget" because these resources are WIDGETOBJs.
  7508.  
  7509.         Note -- resource name :XMN_MENU_HISTORY is defined
  7510.         only for row column widgets created with the 
  7511.         :popup_menu, :simple_popup_menu, :pulldown_menu, or
  7512.         :simple_pulldown_menu options. Using this resource with
  7513.         other variants of the row column widget    is undefined and
  7514.         unguaranteed.
  7515.  
  7516.     :XMN_DEFAULT_BUTTON        XmNdefaultButton
  7517.  
  7518.         XM_BULLETIN_BOARD_WIDGET_CLASS
  7519.  
  7520.         Note -- Motif (mis)declares this resource as representation
  7521.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7522.         resources are WIDGETOBJs.
  7523.  
  7524.     :XMN_CANCEL_BUTTON        XmNcancelButton
  7525.  
  7526.         XM_BULLETIN_BOARD_WIDGET_CLASS
  7527.  
  7528.         Note -- Motif (mis)declares this resource as representation
  7529.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7530.         resources are WIDGETOBJs.
  7531.  
  7532.     :XMN_TOP_WIDGET            XmNtopWidget
  7533.  
  7534.         XM_FORM_WIDGET_CLASS
  7535.  
  7536.         Note -- Motif (mis)declares this resource as representation
  7537.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7538.         resources are WIDGETOBJs.
  7539.  
  7540.     :XMN_BOTTOM_WIDGET        XmNbottomWidget
  7541.  
  7542.         XM_FORM_WIDGET_CLASS
  7543.  
  7544.         Note -- Motif (mis)declares this resource as representation
  7545.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7546.         resources are WIDGETOBJs.
  7547.  
  7548.     :XMN_LEFT_WIDGET        XmNleftWidget
  7549.  
  7550.         XM_FORM_WIDGET_CLASS
  7551.  
  7552.         Note -- Motif (mis)declares this resource as representation
  7553.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7554.         resources are WIDGETOBJs.
  7555.  
  7556.     :XMN_RIGHT_WIDGET        XmNrightWidget
  7557.  
  7558.         XM_FORM_WIDGET_CLASS
  7559.  
  7560.         Note -- Motif (mis)declares this resource as representation
  7561.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7562.         resources are WIDGETOBJs.
  7563.  
  7564.     :XMN_HORIZONTAL_SCROLL_BAR    XmNhorizontalScrollBar
  7565.  
  7566.         XM_LIST_WIDGET_CLASS XM_SCROLLED_WINDOW_WIDGET_CLASS
  7567.  
  7568.         Note -- Motif (mis)declares this resource as representation
  7569.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7570.         resources are WIDGETOBJs.
  7571.  
  7572.     :XMN_VERTICAL_SCROLL_BAR    XmNverticalScrollBar
  7573.  
  7574.         XM_LIST_WIDGET_CLASS XM_SCROLLED_WINDOW_WIDGET_CLASS
  7575.  
  7576.         Note -- Motif (mis)declares this resource as representation
  7577.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7578.         resources are WIDGETOBJs.
  7579.  
  7580.     :XMN_COMMAND_WINDOW        XmNcommandWindow
  7581.  
  7582.         XM_MAIN_WINDOW_WIDGET_CLASS
  7583.  
  7584.         Note -- Motif (mis)declares this resource as representation
  7585.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7586.         resources are WIDGETOBJs.
  7587.  
  7588.     :XMN_MENU_BAR            XmNmenuBar
  7589.  
  7590.         XM_MAIN_WINDOW_WIDGET_CLASS
  7591.  
  7592.         Note -- Motif (mis)declares this resource as representation
  7593.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7594.         resources are WIDGETOBJs.
  7595.  
  7596.     #ifdef MOTIF_1.1
  7597.     :XMN_MESSAGE_WINDOW        XmNmessageWindow
  7598.  
  7599.         XM_MAIN_WINDOW_WIDGET_CLASS
  7600.  
  7601.         Note -- Motif (mis)declares this resource as representation
  7602.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7603.         resources are WIDGETOBJs.
  7604.     #endif /* MOTIF_1.1 */
  7605.  
  7606.     :XMN_WORK_WINDOW        XmNworkWindow
  7607.  
  7608.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  7609.  
  7610.         Note -- Motif 1.0 (mis)declares this resource as representation
  7611.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7612.         resources are WIDGETOBJs.
  7613.  
  7614.     :XMN_CLIP_WINDOW        XmNclipWindow
  7615.  
  7616.         XM_SCROLLED_WINDOW_WIDGET_CLASS
  7617.  
  7618.         Note -- Motif 1.0 (mis)declares this resource as representation
  7619.         XmRWindow. I'm throwing it in with "XmRWidget" because these
  7620.         resources are WIDGETOBJs.
  7621.  
  7622. ______________________________________________________________________________
  7623.  
  7624. ** "XmRWidgetClass":
  7625.  
  7626. *** Type Information:
  7627.  
  7628.     Resource representation type XmRWidgetClass corresponds to
  7629.     WINTERP-Lisp OBJECT. In particular, this OBJECT must be a class
  7630.     object that is a subclass of WIDGET_CLASS.
  7631.  
  7632.     Note that neither Motif nor the Xtoolkit define a representation type
  7633.     "XmRWidgetClass" -- this is a fake type used for all resources that
  7634.     expect a value of type 'WidgetClass'.
  7635.  
  7636.  
  7637. *** Resource names and the widget classes they apply to:
  7638.  
  7639.     :XMN_ENTRY_CLASS        XmNentryClass
  7640.  
  7641.         XM_ROW_COLUMN_WIDGET_CLASS
  7642.  
  7643.         Note -- Motif 1.0 & 1.1 misdeclares resource XmNentryClass as
  7644.         representation type XmRInt. The value for this resource is
  7645.         actually a 'WidgetClass' pointer.
  7646.  
  7647. ______________________________________________________________________________
  7648.  
  7649. ** XmRWindow:
  7650.  
  7651. *** Type Information:
  7652.  
  7653.     Resource representation type XmRWindow corresponds to WINTERP-Lisp
  7654.     atomic type WINDOW. This type is returned by some callbacks, as
  7655.     well as by WIDGET_CLASS method :WINDOW.
  7656.  
  7657.  
  7658. *** Resource names and the widget classes they apply to:
  7659.  
  7660.     :XMN_ICON_WINDOW        XmNiconWindow
  7661.  
  7662.         <SHELL_WIDGET_CLASS>
  7663.  
  7664.     :XMN_WINDOW_GROUP        XmNwindowGroup
  7665.  
  7666.         <SHELL_WIDGET_CLASS>
  7667.  
  7668. ______________________________________________________________________________
  7669.  
  7670. #ifdef MOTIF_1.1
  7671. ** "XmRWindowGravity": [MOTIF 1.1 only]
  7672.  
  7673. *** Type Information:
  7674.  
  7675.     Resource representation type "XmRWindowGravity" corresponds to an
  7676.     enumerated type. Note that neither Motif nor the Xtoolkit define a
  7677.     representation type "XmRWindowGravity". Resources of this type are
  7678.     declared as XmRInt, even though they work like enumerated types.
  7679.  
  7680.     The following keyword symbols represent the valid WINTERP-Lisp
  7681.     values for this type and their associated <X11/X.h> constants:
  7682.  
  7683.         :FORGET_GRAVITY        ForgetGravity
  7684.         :NORTH_WEST_GRAVITY    NorthWestGravity
  7685.         :NORTH_GRAVITY        NorthGravity
  7686.         :NORTH_EAST_GRAVITY    NorthEastGravity
  7687.         :WEST_GRAVITY        WestGravity
  7688.         :CENTER_GRAVITY        CenterGravity
  7689.         :EAST_GRAVITY        EastGravity
  7690.         :SOUTH_WEST_GRAVITY    SouthWestGravity
  7691.         :SOUTH_GRAVITY        SouthGravity
  7692.         :SOUTH_EAST_GRAVITY    SouthEastGravity
  7693.         :STATIC_GRAVITY        StaticGravity
  7694.  
  7695. *** Resource names and the widget classes they apply to:
  7696.  
  7697.     :XMN_WIN_GRAVITY        XmNwinGravity
  7698.  
  7699.         <SHELL_WIDGET_CLASS> <POPUP_SHELL_WIDGET_CLASS>
  7700.  
  7701. #endif /* MOTIF_1.1 */
  7702.  
  7703. ______________________________________________________________________________
  7704.  
  7705. ** XmRXmString:
  7706.  
  7707. *** Type Information:
  7708.  
  7709.     Resource representation type XmRXmString corresponds to the atomic
  7710.     type XM_STRING as returned by primitives XM_STRING_CREATE_L_TO_R and
  7711.     XM_STRING_CREATE.
  7712.  
  7713.     Any XM_STRING value needed by a Motif function, method or resource
  7714.     may be substituted for a STRING. WINTERP will automatically
  7715.     call XmStringCreateLtoR() to convert STRING values to XM_STRING values.
  7716.     
  7717.     Note that Motif XmStrings are problematic in that the XmString
  7718.     resources you set via :SET_VALUES (or at widget creation time) are
  7719.     guaranteed not to be EQ, EQL or EQUAL to the ones you retrieve via
  7720.     :GET_VALUES or via a widget method.
  7721.  
  7722.     In order to check for XmString equality, you have to call
  7723.     XmStringCompare(), via primitive XM_STRING_COMPARE.
  7724.     XmStringCompare() is quite inefficient, so be careful about how you
  7725.     use it. For example, you should ignore the way the Motif
  7726.     documentation shows you to use the XmList widget. Intead, use the 
  7727.     technique demonstrated above in the section "Example of using OOP
  7728.     features of XLISP with Motif widgets".
  7729.  
  7730.     In order to retrieve a STRING value from an XM_STRING value, use
  7731.     primitive XM_STRING_GET_L_TO_R.
  7732.  
  7733. *** Garbage collection of XM_STRINGs:
  7734.  
  7735.     Storage associated with XM_STRINGs is freed via XmStringFree() when
  7736.     a XM_STRING node gets garbage collected. Garbage collection of
  7737.     XM_STRINGs occurs when they are no longer accessible by a Lisp variable.
  7738.  
  7739.  
  7740. *** Resource names and the widget classes they apply to:
  7741.  
  7742.     :XMN_DIALOG_TITLE        XmNdialogTitle
  7743.  
  7744.         XM_BULLETIN_BOARD_WIDGET_CLASS
  7745.  
  7746.     :XMN_PROMPT_STRING        XmNpromptString
  7747.  
  7748.         XM_COMMAND_WIDGET_CLASS
  7749.  
  7750.     :XMN_COMMAND            XmNcommand
  7751.  
  7752.         XM_COMMAND_WIDGET_CLASS
  7753.  
  7754.     :XMN_TEXT_STRING        XmNtextString
  7755.  
  7756.         XM_SELECTION_BOX_WIDGET_CLASS
  7757.  
  7758.     :XMN_LABEL_STRING        XmNlabelString
  7759.  
  7760.         XM_DRAWN_BUTTON_WIDGET_CLASS
  7761.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7762.         XM_ROW_COLUMN_WIDGET_CLASS
  7763.  
  7764.     :XMN_LIST_LABEL_STRING        XmNlistLabelString
  7765.  
  7766.         XM_FILE_SELECTION_BOX_WIDGET_CLASS XM_SELECTION_BOX_WIDGET_CLASS
  7767.  
  7768.     :XMN_APPLY_LABEL_STRING        XmNapplyLabelString
  7769.  
  7770.         XM_FILE_SELECTION_BOX_WIDGET_CLASS XM_SELECTION_BOX_WIDGET_CLASS
  7771.  
  7772.     :XMN_DIR_SPEC            XmNdirSpec
  7773.  
  7774.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7775.  
  7776.     :XMN_FILTER_LABEL_STRING    XmNfilterLabelString
  7777.  
  7778.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7779.  
  7780.     :XMN_DIR_MASK            XmNdirMask
  7781.  
  7782.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7783.  
  7784.     :XMN_ACCELERATOR_TEXT        XmNacceleratorText
  7785.  
  7786.         XM_LABEL_WIDGET_CLASS XM_LABEL_GADGET_CLASS
  7787.  
  7788.     :XMN_MESSAGE_STRING        XmNmessageString
  7789.  
  7790.         XM_MESSAGE_BOX_WIDGET_CLASS
  7791.  
  7792.     :XMN_OK_LABEL_STRING        XmNokLabelString
  7793.  
  7794.         XM_MESSAGE_BOX_WIDGET_CLASS XM_SELECTION_BOX_WIDGET_CLASS
  7795.  
  7796.     :XMN_CANCEL_LABEL_STRING    XmNcancelLabelString
  7797.  
  7798.         XM_MESSAGE_BOX_WIDGET_CLASS XM_SELECTION_BOX_WIDGET_CLASS
  7799.  
  7800.     :XMN_HELP_LABEL_STRING        XmNhelpLabelString
  7801.  
  7802.         XM_MESSAGE_BOX_WIDGET_CLASS XM_SELECTION_BOX_WIDGET_CLASS
  7803.  
  7804.     :XMN_TITLE_STRING        XmNtitleString
  7805.  
  7806.         XM_SCALE_WIDGET_CLASS
  7807.  
  7808.     :XMN_SELECTION_LABEL_STRING    XmNselectionLabelString
  7809.  
  7810.         XM_SELECTION_BOX_WIDGET_CLASS
  7811.  
  7812.     #ifdef MOTIF_1.1
  7813.     :XMN_DIRECTORY            XmNdirectory
  7814.  
  7815.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7816.  
  7817.     :XMN_PATTERN            XmNpattern
  7818.  
  7819.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7820.  
  7821.     :XMN_DIR_LIST_LABEL_STRING    XmNdirListLabelString
  7822.  
  7823.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7824.  
  7825.     :XMN_NO_MATCH_STRING        XmNnoMatchString
  7826.  
  7827.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7828.  
  7829.     :XMN_FILE_LIST_LABEL_STRING    XmNfileListLabelString
  7830.  
  7831.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7832.  
  7833.     :XMN_OPTION_LABEL        XmNoptionLabel
  7834.  
  7835.         <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_OPTION_MENU>
  7836.     #endif /* MOTIF_1.1 */
  7837.  
  7838. ______________________________________________________________________________
  7839.  
  7840. ** XmRXmStringTable:
  7841.  
  7842. *** Type Information:
  7843.  
  7844.     One may set an XmRXmStringTable resource by passing a
  7845.     ARRAY or LIST value containing either STRING or XM_STRING nodes.
  7846.     Any STRING values are automatically converted to XmStrings via
  7847.     XmStringCreateLtoR().
  7848.  
  7849.     Limitations in the design of Motif/Xtk prevent WINTERP from being 
  7850.     able to retrieve XmRXmStringTable resources using WIDGET_CLASS
  7851.     method :GET_VALUES. Accessor methods are provided to allow
  7852.     retrieval of these resources....
  7853.  
  7854.  
  7855. *** Garbage Collection of XmRXmStringTable:
  7856.  
  7857.     A Motif XmStringTable is represented as an array or list of
  7858.     XmStrings.  The XmStrings in these sequences will get garbage
  7859.     collected if the vector or array holding them gets collected.
  7860.  
  7861.  
  7862. *** Resource names and the widget classes they apply to:
  7863.  
  7864.     :XMN_HISTORY_ITEMS        XmNhistoryItems
  7865.  
  7866.         XM_COMMAND_WIDGET_CLASS
  7867.         [note: :GET_VALUES can't retrieve this resource, use method
  7868.                (send <commandwidget> :GET_HISTORY_ITEMS)]
  7869.  
  7870.     :XMN_ITEMS            XmNitems
  7871.  
  7872.         XM_LIST_WIDGET_CLASS
  7873.         [note: :GET_VALUES can't retrieve this resource, use method
  7874.                (send <listwidget> :GET_ITEMS)]
  7875.  
  7876.     :XMN_SELECTED_ITEMS        XmNselectedItems
  7877.  
  7878.         XM_LIST_WIDGET_CLASS
  7879.         [note: :GET_VALUES can't retrieve this resource, use method
  7880.                (send <listwidget> :GET_SELECTED_ITEMS)]
  7881.  
  7882.     :XMN_LIST_ITEMS            XmNlistItems
  7883.  
  7884.         XM_SELECTION_BOX_WIDGET_CLASS
  7885.         [note: :GET_VALUES can't retrieve this resource, use method
  7886.                (send <selectionbox> :GET_LIST_ITEMS)]
  7887.  
  7888.     #ifdef MOTIF_1.1
  7889.     :XMN_DIR_LIST_ITEMS        XmNdirListItems
  7890.  
  7891.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7892.         [note: :GET_VALUES can't retrieve this resource, use method
  7893.                (send <fileselboxwidget> :GET_DIR_LIST_ITEMS)]
  7894.  
  7895.     :XMN_FILE_LIST_ITEMS        XmNfileListItems
  7896.  
  7897.         XM_FILE_SELECTION_BOX_WIDGET_CLASS
  7898.         [note: :GET_VALUES can't retrieve this resource, use method
  7899.                (send <fileselboxwidget> :GET_FILE_LIST_ITEMS)]
  7900.  
  7901.     :XMN_BUTTONS            XmNbuttons
  7902.  
  7903.         <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_*>
  7904.         [note: this resource can be set only at widget-creation time
  7905.         setting via :SET_VALUES will do nothing, and retrieval via
  7906.         :GET_VALUES will signal an error.]
  7907.  
  7908.     :XMN_BUTTON_ACCELERATOR_TEXT    XmNbuttonAcceleratorText
  7909.  
  7910.         <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_*>
  7911.         [note: this resource can be set only at widget-creation time
  7912.         setting via :SET_VALUES will do nothing, and retrieval via
  7913.         :GET_VALUES will signal an error.]
  7914.     #endif /* MOTIF_1.1 */
  7915.  
  7916. ______________________________________________________________________________
  7917.  
  7918. ** Missing Resources in WINTERP:
  7919.  
  7920.     The current version of WINTERP does not allow access to the 
  7921.     following resources:
  7922.  
  7923.     XmNsimpleCallback: this is a special inconsistent way of setting
  7924.         callbacks on <XM_ROW_COLUMN_WIDGET_CLASS created w/ :SIMPLE_*>.
  7925.         I suggest using XM_ROW_COLUMN_WIDGET_CLASS's XmNentryCallback
  7926.         instead. See "Note on XmCreateSimple*() routines" above for
  7927.         details. Also, see  ./../examples/fake-app.lsp and
  7928.         ./../examples/RowColumn.lsp.
  7929.  
  7930.     XmNchildren/XmNnumChildren: this read-only resource may not be
  7931.         retrieved via WINTERP's :GET_VALUES in a straightforward
  7932.         fashion. Instead, use method
  7933.             (send <composite_widget> :GET_CHILDREN)
  7934.  
  7935.     XmNargv/XmNargc: due to inconsistent behavior of the XmNargv
  7936.         resource you must set and retrieve this resource via the
  7937.         following methods on APPLICATION_SHELL_WIDGET_CLASS:
  7938.             (send <application-shell-widget> :SET_ARGV)
  7939.             (send <application-shell-widget> :GET_ARGV)
  7940.  
  7941.     XmNpostFromCount/XmNpostFromList: these seem to be internal,
  7942.         undocumented resources on XmRowColumn, therefore I'm not going
  7943.         to interface these. If you figure out what these are used
  7944.         for, and need to use them, add a method on
  7945.         XM_ROW_COLUMN_WIDGET_CLASS that is similar to method
  7946.         ./../src-server/wc_WIDGET.c:Widget_Class_Method_GET_CHILDREN().
  7947.  
  7948.     XmNcolormap: I haven't interfaced this Core/Shell resource because
  7949.         WINTERP does not provide a type COLORMAP yet. If I ever
  7950.         need to fiddle with colormaps directly, this can be added
  7951.         trivially.
  7952.  
  7953.     XmNatom: I haven't interfaced this Xm/Protocols.c resource because
  7954.         it seems to be an undocumented, internal resource used by
  7955.         the protocol manager.
  7956.         
  7957.     XmNtitleEncoding: / XmNiconNameEncoding: I haven't interfaced these
  7958.         shell widget resources because I haven't provided a type 
  7959.         ATOM yet. I'll probably add these when I add interfaces to
  7960.         the protocol manager functionality.
  7961.  
  7962.     XmNextensionType:  I haven't interfaced this resource because
  7963.         it seems to be an undocumented, internal resource used by
  7964.         Motif.
  7965.  
  7966.     XmNoutputCreate/XmNinputCreate/XmNinsertPosition/XmNcreatePopupChildProc:
  7967.         These resources take a C function-pointer. The kinds of
  7968.         things done by these procedures are probably too low-level
  7969.         to interface to the WINTERP. If you need access to these in
  7970.         WINTERP the simplest thing to do is create a trivial
  7971.         subclass (essentially a C wrapper) of the desired widget-class
  7972.         such that this resource gets set to the desired
  7973.         creation/insert/popup procedure that is implemented in C.
  7974.  
  7975.     XmNuserData: this resource is used internally by WINTERP. If you
  7976.         need to attach your own data to widgets, you may do it by
  7977.         declaring a subclass of the desired widget-class containing
  7978.         instance variables and methods to access the instance variables.
  7979.  
  7980.     XmNsource: This XmText resource takes a C function pointer. The kinds of
  7981.         things done by these procedures are probably too low-level
  7982.         to interface to the WINTERP. If you need access to these in
  7983.         WINTERP the simplest thing to do is create a trivial
  7984.         subclass (essentially a C wrapper) of the XmText such
  7985.         that this resource gets set to the desired C-implemented
  7986.         procedure.
  7987.  
  7988.     XmNqualifySearchDataProc/XmNdirSearchProc/XmNfileSearchProc:
  7989.  
  7990.         These XmFileSelectionBox resources take a C function
  7991.         pointer. The kinds of things done by these procedures are
  7992.         probably too low-level to interface to the WINTERP. If you
  7993.         need access to these in WINTERP the simplest thing to do is
  7994.         create a trivial subclass (essentially a C wrapper) of the
  7995.         XmFileSelectionBox class such that these resources get set
  7996.         to the desired C-implemented procedure.
  7997.  
  7998.     XmNscreen: this Core resource hasn't been interfaced because
  7999.         WINTERP does not yet support multiple screens and does
  8000.         not have a type SCREEN. At some point, it may get updated
  8001.         to support multiple screens, at which point I'll interface
  8002.         this resource.
  8003.  
  8004.     XmNvisual: this Shell resource hasn't been interfaced yet because
  8005.         WINTERP does not support type VISUAL yet, and I haven't
  8006.         needed to use VISUAL in my applications.
  8007.  
  8008. =============================================================================
  8009.  
  8010. * Additional X, Xtoolkit, and Winterp Functionality
  8011.  
  8012. ** WIDGETOBJP -- primitive to check if lisp value is a widget/gadget.
  8013.  
  8014.     (WIDGETOBJP <expr>)
  8015.         --> returns T if argument is a WIDGETOBJ, else NIL.
  8016.  
  8017.     WIDGETOBJP is a type predicate testing to see if a value is 
  8018.     a widget or gadget object. 
  8019.  
  8020. ** :EXISTS_P -- WIDGET_CLASS method to test if widget exists
  8021.  
  8022.     (send <widget> :EXISTS_P)
  8023.         --> returns T if the widget exists (and hasn't been destroyed);
  8024.             returns NIL if the widget has been destroyed 
  8025.             or if the widget has never been initialized.
  8026.  
  8027.     Use this method for the following problem: A WIDGETOBJ value may be
  8028.     stored as the value of a symbol, or stored in a functional closure;
  8029.     the lifetime of the widget associated with the WIDGETOBJ is not
  8030.     necessarily the same. This method can test to see if the widget
  8031.     associated with the WIDGETOBJ has been destroyed by the user
  8032.     through some previous operation. Using this method can allow
  8033.     programmers to prevent sending messages to widgets that have been
  8034.     destroyed; normally, sending a message to a destroyed widget would
  8035.     signal an error.
  8036.     
  8037. ** GET_MOUSED_WIDGET -- primitive for visually interacting with widgets.
  8038.  
  8039.     (GET_MOUSED_WIDGET)
  8040.         --> returns the WIDGETOBJ designated by the user.
  8041.  
  8042.     Evaluating GET_MOUSED_WIDGET will change the cursor to a crossbar,
  8043.     indicating that the user is to 'click' the mouse on a widget
  8044.     managed by WINTERP. GET_MOUSED_WIDGET will then return the
  8045.     WIDGETOBJ corresponding to the selected widget.
  8046.  
  8047.     You can use this primitive to visually alter widgets displayed by
  8048.     WINTERP, for example, evaluating the following form will invert the
  8049.     colors on any widget you click (note -- you can't change the
  8050.     colors on a gadget):
  8051.           (let
  8052.               ((widget (get_moused_widget))
  8053.                foreground
  8054.                background
  8055.                )
  8056.             (send widget :get_values
  8057.               :XMN_FOREGROUND 'foreground
  8058.               :XMN_BACKGROUND 'background
  8059.               )
  8060.             (send widget :set_values
  8061.               :XMN_FOREGROUND background
  8062.               :XMN_BACKGROUND foreground
  8063.               ))
  8064.  
  8065.     You may use this primitive for sending arbitrary messages to
  8066.     arbitrary widgets "visually". This primitive can be used to
  8067.     implement "builder-like" and "hypercard-like" features with WINTERP.
  8068.     For additional examples using this primitive, see 
  8069.     ./../examples/interact.lsp
  8070.  
  8071.     Note: GET_MOUSED_WIDGET will work on any kind of widget, not only
  8072.     widgets created at the Lisp level in WINTERP. This means that you
  8073.     can use it to modify widgets inside a composite widget (e.g., the 
  8074.     scrollbar in a scrolled text or list widget). Furthermore, if you
  8075.     take an existing C-implemented Motif application and link it in
  8076.     with WINTERP such that your application uses WINTERP's event
  8077.     handling loop in main(), then you can use GET_MOUSED_WIDGET to
  8078.     modify the widgets created in your own C-implemented application code!
  8079.  
  8080.     KNOWN BUG -- you cannot use get_moused_widget primitive on widgets
  8081.     within a menu system. Even if you manage to post a menu that stays
  8082.     posted and then    call this function, the "grab" from the menu
  8083.     prevents this primitive from working...
  8084.  
  8085.     Note: if you are using Motif 1.1 and want GET_MOUSED_WIDGET's 
  8086.     functionality with the additional ability to control the mouse
  8087.     sprite, see also XM_TRACKING_LOCATE.
  8088.  
  8089. ** X_ALLOC_COLOR == XParseColor() + XAllocColor():
  8090.  
  8091.     (X_ALLOC_COLOR <color>)
  8092.         --> returns a PIXEL atom corresponding to a read-only
  8093.         color cell in the installed colormap.
  8094.     
  8095.     <color> is a string, either a colorname from /usr/lib/X11/rgb.txt
  8096.     or a hexadecimal color specification of format "#RRGGBB".
  8097.  
  8098. ** X_STORE_COLOR == XParseColor() + XStoreColor():
  8099.  
  8100.     (X_STORE_COLOR <pixel> <color>) 
  8101.         --> returns a PIXEL atom.
  8102.  
  8103.     X_STORE_COLOR stores an RGB/Color value into a single read/write
  8104.     colormap cell represented by type-PIXEL atom <pixel>.
  8105.  
  8106.     <color> is a string, either a colorname from /usr/lib/X11/rgb.txt
  8107.     or a hexadecimal color specification of format "#RRGGBB".
  8108.  
  8109.     Note that read/write colormap cells can be created via primitive
  8110.     X_ALLOC_N_COLOR_CELLS_NO_PLANES, and these are useful for
  8111.     generating the appearance of having colors shared by multiple
  8112.     widgets on the screen. For example usage, see 
  8113.     ./../examples/colorsetr.lsp .
  8114.  
  8115. ** X_ALLOC_N_COLOR_CELLS_NO_PLANES == XAllocColorCells(d,c,FALSE,NULL,0,...):
  8116.  
  8117.     (X_ALLOC_N_COLOR_CELLS_NO_PLANES <num-cells>)
  8118.         --> returns an array of <pixel>,
  8119.         each <pixel> being a type-PIXEL atom representing a single
  8120.         read/write color cell in the installed colormap.
  8121.  
  8122.     <num-cells>, a FIXNUM > 0, indicates the number of read/write color
  8123.     cells to allocate.
  8124.  
  8125.     For details, see see Oliver Jones' "Introduction to the X Window
  8126.     System", p. 278. For example usage, see ./../examples/colorsetr.lsp .
  8127.  
  8128. ** XT_ADD_TIMEOUT / XT_REMOVE_TIMEOUT == XtAppAddTimeout() / XtRemoveTimeout()
  8129.  
  8130.     (XT_ADD_TIMEOUT <interval> <code>)
  8131.             --> returns a <timeout_obj> 
  8132.  
  8133.     <interval> is a FIXNUM, the number of milliseconds before the
  8134.     timeout fires.
  8135.  
  8136.     <code> is a list of Lisp expressions that are evaluated when the
  8137.     timeout    occurs. During the timeout, the lexical environment that
  8138.     existed for the call to XT_ADD_TIMEOUT will be used for value and
  8139.     functional bindings. Additionally, the symbol TIMEOUT_OBJ is bound
  8140.     to the timeout object that caused the timeout.
  8141.  
  8142.     A variant of the above form allows efficient scheduling of
  8143.     recurrent timeouts when called from within <code>
  8144.         (XT_ADD_TIMEOUT <interval> TIMEOUT_OBJ)
  8145.     Instead of creating a new closure around the same <code> each time
  8146.     a recurrent timeout is rescheduled, this second form for XT_ADD_TIMEOUT
  8147.     allows you to take the TIMEOUT_OBJ from a previously expired
  8148.     timeout and reschedule a new timeout using the closure setup by the
  8149.     initial call to (XT_ADD_TIMEOUT <interval> <code>).  During the
  8150.     execution of <code>, the symbol TIMEOUT_OBJ is bound to
  8151.     <timeout-obj> so that you don't need to keep around a global
  8152.     variable for each recurrent timeout.
  8153.  
  8154.     The timeout scheduled by XT_ADD_TIMEOUT may be removed by passing
  8155.     <timeout_obj> into the primitive XT_REMOVE_TIMEOUT:
  8156.         (XT_REMOVE_TIMEOUT <timeout_obj>)
  8157.         <timeout_obj> is the value returned by XT_ADD_TIMEOUT.
  8158.  
  8159.     To test whether the timeout associated with a <timeout_obj> has
  8160.     expired, use:
  8161.         (TIMEOUT_ACTIVE_P <timeout_obj>)
  8162.             --> returns T if <timeout_obj> is still scheduled;
  8163.                 returns NIL if <timeout_obj> has expired or if
  8164.                 the timeout was inactivated by XT_REMOVE_TIMEOUT.
  8165.  
  8166. ** Translations, Accelerators, and Actions.
  8167.  
  8168. *** Action Procedure Lisp() -- call the XLISP evaluator from a translation table.
  8169.  
  8170.     WINTERP has a built-in ActionProc named "Lisp" that allows you to
  8171.     call arbitrary Lisp functions from a translation or accelerator table.
  8172.     The arguments passed on to ActionProc "Lisp" become the elements in
  8173.     the Lisp form passed on to the evaluator when the action is fired.
  8174.  
  8175.     For example, a translation/accelerator table containing an entry 
  8176.     "<EnterWindow>: Lisp(Lisp-function arg1 arg2 arg3)" will end up 
  8177.     evaluating the Lisp form '(Lisp-function arg1 arg2 arg3)' whenever 
  8178.     an EnterWindow event is processed.
  8179.  
  8180.     In the lexical scope of the action invocation, ACTION_WIDGET gets
  8181.     bound to the widget causing the action, and ACTION_XEVENT gets
  8182.     bound to the event. See ./../examples/trans.lsp for examples.
  8183.  
  8184.     KNOWN-BUG: I haven't found a way of escaping characters passed on
  8185.     to the translation/action table parsers to allow Lisp strings or
  8186.     lips lists to be passed on to the Lisp evaluator that is called by
  8187.     this function.  Using the evaluator through an action proc is still
  8188.     useful, just don't try to pass in very complex Lisp forms.
  8189.  
  8190. *** XT_PARSE_TRANSLATION_TABLE == XtParseTranslationTable():
  8191.  
  8192.     (XT_PARSE_TRANSLATION_TABLE <string>)
  8193.         --> returns a XT_TRANSLATIONS node
  8194.  
  8195.     This primitive compiles <string> into a translation table and
  8196.     returns the compiled table. 
  8197.  
  8198.     For more information on the syntax of the string representation of
  8199.     translation tables, see the X11r4 documentation "X Toolkit
  8200.     Intrinsics -- C    Language Interface": "Appendix B: Translation Table
  8201.     Syntax" and "Chapter 10: Translation Management".
  8202.  
  8203.     NOTE: the memory allocated by XtParseTranslationTable() isn't freed
  8204.     anywhere yet -- I can't find any documentation that says you're
  8205.     supposed to free this. For now this may be a memory leak.
  8206.  
  8207. *** XT_PARSE_ACCELERATOR_TABLE == XtParseAcceleratorTable():
  8208.  
  8209.     (XT_PARSE_ACCELERATOR_TABLE <string>)
  8210.         --> returns a XT_ACCELERATORS node
  8211.  
  8212.     This primitive compiles <string> into an accelerator table and
  8213.     returns the compiled table.
  8214.  
  8215.     For more information on the syntax of the string representation of
  8216.     accelerator tables, see the X11r4 documentation "X Toolkit
  8217.     Intrinsics -- C    Language Interface": "Appendix B: Translation Table
  8218.     Syntax" and "Chapter 10: Translation Management".
  8219.  
  8220.     NOTE: the memory allocated by XtParseAcceleratorTable() isn't freed
  8221.     anywhere yet -- I can't find any documentation that says you're
  8222.     supposed to free this. For now this may be a memory leak.
  8223.  
  8224. ** XM_GET_PIXMAP == XmGetPixmap():
  8225.  
  8226.     (XM_GET_PIXMAP <image-name> <foreground> <background>)
  8227.         --> returns a PIXMAP node.
  8228.  
  8229.     <image-name> is a string representing a XImage that has been
  8230.     cached via XM_INSTALL_IMAGE. If such an XImage isn't found, then
  8231.     <image-name> is treated as the filename for a X10 or X11 bitmap file.
  8232.     You need to give a full pathname to the bitmap file, or alternately,
  8233.     you may set the environment variable XBMLANGPATH to the directories to
  8234.     be searched for bitmap files. XBMLANGPATH defaults to
  8235.     /usr/lib/X11/%L/bitmaps/%N/%B:/usr/lib/X11/%L/bitmaps/%B:/usr/lib/X11/bitmaps/%B:/usr/include/X11/bitmaps/%B
  8236.     
  8237.     In additions to images you have installed, Motif features 10
  8238.     preinstalled images: "background", "25_foreground",
  8239.     "50_foreground", "75_foreground", "vertical", "horizontal",
  8240.     "slant_right", "slant_left", "menu_cascade", "menu_checkmark".
  8241.     
  8242.     <foreground> and <background> may be strings representing color names,
  8243.     or values of type PIXEL. (generated by X_ALLOC_COLOR, or via widget-method
  8244.     :get_values on :XMN_FOREGROUND or :XMN_BACKGROUND resources).
  8245.     
  8246.     This function returns a value of type PIXMAP, which is suitable for
  8247.     passing on to any Pixmap-valued widget resource so as to display an
  8248.     image inside a widget.
  8249.     
  8250.     Note that there is no interface to XmDestroyPixmap()-- unreferenced
  8251.     pixmaps    are automatically destroyed by WINTERP during garbage
  8252.     collection.
  8253.  
  8254. ** XM_INSTALL_IMAGE == XmInstallImage():
  8255.  
  8256.     (XM_INSTALL_IMAGE <ximage> <image_name>)
  8257.         --> returns T if success,  NIL if a NULL <ximage>, or
  8258.             duplicate <image_name> is given.
  8259.  
  8260.     This primitive installs an XIMAGE node for use by Motif's Image and
  8261.     Pixmap cacheing routines. 
  8262.  
  8263.     <ximage> is an XIMAGE node as returned by XM_GET_XIMAGE_FROM_FILE; 
  8264.  
  8265.     <image_name> is a STRING, the name under which the <ximage> is cached.
  8266.     
  8267. ** XM_UNINSTALL_IMAGE == XmUninstallImage():
  8268.  
  8269.     (XM_UNINSTALL_IMAGE <ximage>)
  8270.         --> returns T if success,  NIL if a NULL <ximage>, or
  8271.             <ximage> cannot be found in the image cache.
  8272.  
  8273.     This primitive removes an XIMAGE from Motif's Image cache, freeing
  8274.     up the storage associated with the XImage.
  8275.  
  8276.     <ximage> is an XIMAGE node as returned by XM_GET_XIMAGE_FROM_FILE
  8277.     
  8278. ** XM_GET_XIMAGE_FROM_FILE == _XmGetImageFromFile():
  8279.  
  8280.     (XM_GET_XIMAGE_FROM_FILE <filepath>)
  8281.         --> returns an XIMAGE node if an XImage was successfully
  8282.             retrieved from the given bitmap file; NIL if
  8283.  
  8284.     This primitive reads an X10 or X11 bitmap file and returns an
  8285.     XImage structure associated with that file.
  8286.  
  8287.     <filepath> is a STRING, the full path name to the file containing
  8288.     the XImage data.
  8289.  
  8290. #ifdef MOTIF_1.1
  8291. ** XM_GET_COLORS == XmGetColors() [Motif 1.1 only]:
  8292.  
  8293.     (XM_GET_COLORS <background-pixel>)
  8294.         --> returns an array of 5 PIXEL values
  8295.               #(<background>
  8296.             <foreground>
  8297.             <top_shadow>
  8298.             <bot_shadow>
  8299.             <select>)
  8300.  
  8301.     Given PIXEL-type argument <background-pixel> representing the
  8302.     background color of a widget, XM_GET_COLORS will calculate and
  8303.     return PIXEL type values for foreground, select, and shadow colors.
  8304.     For an example of XM_GET_COLORS usage, see ./../examples/colorsetr.lsp .
  8305.  
  8306.     Note that this routine will change at some future date to take
  8307.     <screen> and <colormap> arguments that are used by XmGetColors().
  8308.     Currently, XM_GET_COLORS uses the default screen and colormap
  8309.     of the WINTERP application's *TOPLEVEL_WIDGET*
  8310. #endif /* MOTIF_1.1 */
  8311.  
  8312. #ifdef MOTIF_1.1
  8313. ** XM_SET_FONT_UNITS == XmSetFontUnits() [Motif 1.1 only]:
  8314.  
  8315.     (XM_SET_FONT_UNITS <horiz-val> <vert-val>)
  8316.         --> Returns NIL.
  8317.  
  8318.     XM_SET_FONT_UNITS allows applications to initialize the font unit
  8319.     values to nonnegative FIXNUM values <horiz-val> and <vert-val>.
  8320.     Applications may want to specify resolution-independent data based
  8321.     on a global font size.  This function must be called before any
  8322.     widgets with resolution-independent data are created.  See the
  8323.     documentation on resource :XMN_UNIT_TYPE above, as well as the
  8324.     manual pages for XmGadget, XmManager, and XmPrimitive for more
  8325.     information on resolution independence.
  8326.  
  8327.     Note: when WINTERP allows for multiple displays, this function will
  8328.     end up changing argument sequences to accomodate a <display> arg.
  8329. #endif /* MOTIF_1.1 */
  8330.  
  8331. #ifdef MOTIF_1.1
  8332. ** XM_TRACKING_LOCATE == XmTrackingLocate() [Motif 1.1 only]:
  8333.  
  8334.     (XM_TRACKING_LOCATE <widget> <fontcursor-FIXNUM> [<confine-to-p>])
  8335.         --> Returns a WIDGETOBJ that was selected by the user.
  8336.         Returns NIL if the window of the buttonpress is not a widget.
  8337.  
  8338.     "XmTrackingLocate provides a modal interface for selection of
  8339.     a component.  It is intended to support context help.  The function
  8340.     grabs the pointer and returns the widget in which a button press
  8341.     occurs."  (taken from XmTrackingLocate.3X man-page).
  8342.  
  8343.     <widget> is the widget "to use as the basis of the modal interaction"
  8344.  
  8345.     <fontcursor-FIXNUM> specifies the shape of the cursor for this
  8346.     interaction.  the value of this FIXNUM specifies a font whose
  8347.     name/value is defined in /usr/include/X11/cursorfont.h.
  8348.  
  8349.     If the last arg supplied, <confine-to-p>, is non-NIL, then the
  8350.     interaction will be confined to <widget>. If this arg is not
  8351.     supplied, <confine-to-p> is treated as NIL.
  8352.  
  8353.     Note: See also WINTERP's GET_MOUSED_WIDGET primitive, which offers
  8354.     similar functionality to XM_TRACKING_LOCATE but predates it
  8355.     (XM_TRACKING_LOCATE is new to Motif 1.1).
  8356. #endif /* MOTIF_1.1 */
  8357.  
  8358. #ifdef MOTIF_1.1
  8359. ** XM_CONVERT_UNITS == XmConvertUnits() [Motif 1.1 only]:
  8360.  
  8361.     (XM_CONVERT_UNITS <widget> <orientation>
  8362.               <from_unit_type> <from_value>
  8363.               <to_unit_type>)
  8364.         --> Returns the converted value, a FIXNUM.
  8365.  
  8366.     "XmConvertUnits - a function that converts a value in one unit type
  8367.     to another unit type." (quoted from XmConvertUnits.3X manual page).
  8368.  
  8369.     <widget> is a WIDGETOBJ -- "Specifies the widget for which the data
  8370.     is to be converted."
  8371.  
  8372.     <orientation> is a keyword symbol, either :HORIZONTAL or :VERTICAL
  8373.     "Specifies whether the converter uses the horizontal or vertical
  8374.     screen resolution when performing the conversions."
  8375.  
  8376.     <from_unit_type> and <to_unit_type> are keyword symbols, either
  8377.     :PIXELS, :100TH_MILLIMETERS, :1000TH_INCHES, :100TH_POINTS,
  8378.     :100TH_FONT_UNITS.
  8379.  
  8380.     <from_value> is a FIXNUM.
  8381.  
  8382.     Note that Motif resolution independence functions
  8383.     XmCvtFromHorizontalPixels(), XmCvtFromVerticalPixels(),
  8384.     XmCvtToHorizontalPixels(), XmCvtToVerticalPixels() have not been
  8385.     interfaced since their functionality can be achieved through
  8386.     XmConvertUnits().
  8387. #endif /* MOTIF_1.1 */
  8388.  
  8389. ** XM_SET_MENU_CURSOR == XmSetMenuCursor():
  8390.  
  8391.     (XM_SET_MENU_CURSOR <fontcursor>)
  8392.         --> Returns NIL.
  8393.     
  8394.      "XmSetMenuCursor programmatically modifies the menu cursor for a client;
  8395.      after the cursor has been created by the client, this function registers
  8396.      the cursor with the menu system.  After calling this function, the
  8397.      specified cursor is displayed whenever this client displays a Motif
  8398.      menu on the indicated display.  The client can then specify different
  8399.      cursors on different displays." (from XmSetMenuCursor.3X manual page).
  8400.     
  8401.     <fontcursor>> specifies the shape of the cursor for this interaction.
  8402.     The value of this FIXNUM specifies a font whose name/value is defined in
  8403.     /usr/include/X11/cursorfont.h.
  8404.     
  8405.     Note: when WINTERP allows for multiple displays, this function will
  8406.     end up changing arg sequences to accomodate a <display> arg.
  8407.  
  8408. #ifdef MOTIF_1.1
  8409. ** XT_RESOLVE_PATHNAME == XtResolvePathname() [Motif 1.1 only]:
  8410.  
  8411.     (XT_RESOLVE_PATHNAME <type> <filename> <suffix> <path>)
  8412.         --> returns a STRING representing the pathname of an
  8413.         existing file created from the parameters <type> <filename>
  8414.         <suffix> and <path>. Returns NIL if no such file exists, the
  8415.         file isn't readable, or the specification is a directory.
  8416.  
  8417.     <path> is a string of paths separated by colons (':'), in which the 
  8418.         following substitutions are done:
  8419.          %N -- gets substituted by the parameter <filename>, a name without
  8420.            the extension.
  8421.          %T -- gets substituted by the parameter <type>, a directory name. 
  8422.          %S -- gets substituted by the parameter <suffix>.
  8423.          
  8424.          X11r4 Language-dependent substitutions for %L, %l %t, %c may occur
  8425.          as well. See the documentation for XtResolvePathname() for
  8426.          further details.
  8427.     
  8428.     <type> is a STRING, or NIL. This substitutes for occurrences of %T in
  8429.          <path>.
  8430.     
  8431.     <filename> is a STRING. If this parameter is NIL, then note that
  8432.          XtResolvePathname() will substitute the application class name.
  8433.     
  8434.     <suffix> is a STRING, or NIL. This substitutes for occurrences of %S
  8435.         in <path>.
  8436.  
  8437.     For a useful example using XT_RESOLVE_PATHNAME, see Winterp-Lisp file
  8438.     ./../examples/prov-req.lsp . 
  8439. #endif /* MOTIF_1.1 */
  8440.  
  8441. ** XT_MANAGE_CHILDREN == XtManageChildren():
  8442.  
  8443.     (XT_MANAGE_CHILDREN <widgets...>)
  8444.         --> returns T.
  8445.     
  8446.     Given <widgets...>, an ARRAY or list of WIDGETOBJs, all of which
  8447.     must be children of the same parent, this primitive will add those
  8448.     widgets to their parent-widget's managed list, which means they
  8449.     will become visible (if mapped) and will take up space within the
  8450.     managing widget.
  8451.  
  8452.     If the shell widget ancestor of <widgets...> has been :REALIZE'd,
  8453.     calling XT_MANAGE_CHILDREN on a sequence of child widgets is
  8454.     more efficient than specifying the :MANAGED option to each
  8455.     child-widget creation form, or sending the :MANAGE message to each
  8456.     child-widget created. Note that the efficiency argument above is
  8457.     moot if the shell widget ancestor of <widgets...> has not been
  8458.     :REALIZE'd.
  8459.  
  8460.     An error will be signaled if the widgets passed to this routine do
  8461.     not all have the same parent.
  8462.     
  8463. ** XT_UNMANAGE_CHILDREN == XtUnmanageChildren():
  8464.  
  8465.     (XT_UNMANAGE_CHILDREN <widgets...>)
  8466.         --> returns T.
  8467.  
  8468.     Given <widgets...>, an ARRAY or LIST of WIDGETOBJs, all of which
  8469.     must be children of the same parent, this primitive will remove those
  8470.     widgets from their parent-widget's managed list, which means they
  8471.     will no longer be visible or take up space.
  8472.  
  8473.     Calling XT_UNMANAGE_CHILDREN on a sequence of child widgets is more
  8474.     efficient than sending the :UNMANAGE message to each child-widget.
  8475.  
  8476.     An error will be signaled if the widgets passed to this routine do
  8477.     not all have the same parent.
  8478.  
  8479. ** GET_MOUSE_LOCATION == XQueryPointer():
  8480.  
  8481.     (GET_MOUSE_LOCATION)
  8482.         --> returns dotted pair (root-x . root-y) representing
  8483.                 the x,y location of the mouse sprite with respect
  8484.                     to the root window. To access root-x, use 'car' and
  8485.             to access root-y, use 'cdr'.
  8486.  
  8487. ** Primitives for manipulating XM_STRINGs:
  8488.  
  8489.     Because Motif's XmStrings are such a complete pain to deal with,
  8490.     I've tried to make it so you can pretend XmStrings don't exist at
  8491.     all by providing automatic string-->XmString conversions for
  8492.     setting resources and for various widget methods.
  8493.  
  8494.     Alas, there are cases where you need to retrieve STRING values from
  8495.     an XM_STRING, create special XM_STRINGs, convert compound text to
  8496.     XM_STRINGs (or vice versa), or need to compare two XM_STRINGS. For
  8497.     such cases, I've interfaced most of Motif's XmString
  8498.     functionality...
  8499.  
  8500. #ifdef MOTIF_1.1
  8501. ***  XM_CVT_CT_TO_XM_STRING == XmCvtCTToXmString() [Motif 1.1 only]:
  8502.  
  8503.     (XM_CVT_CT_TO_XM_STRING <compound-text>)
  8504.         --> returns an XM_STRING representing <compound-text>.
  8505.  
  8506.     <compound-text> is an XLISP STRING type but it is encoded using 
  8507.     compound text format, which is described in the X Consortium
  8508.     Standard "Compound Text Encoding".
  8509. #endif /* MOTIF_1.1 */
  8510.  
  8511. #ifdef MOTIF_1.1
  8512. *** XM_CVT_XM_STRING_TO_CT == XmCvtXmStringToCT() [Motif 1.1 only]:
  8513.  
  8514.     (XM_CVT_XM_STRING_TO_CT <xmstring>)
  8515.         --> returns a STRING.
  8516.  
  8517.     This function converts XM_STRING type argument <xmstring> to
  8518.     a STRING encoded in compound text format. Compound text format is
  8519.     described in the X Consortium Standard "Compound Text Encoding".
  8520. #endif /* MOTIF_1.1 */
  8521.  
  8522. *** XM_STRING_BYTE_COMPARE == XmStringByteCompare():
  8523.  
  8524.     (XM_STRING_BYTE_COMPARE <xmstring_a> <xmxtring_b>)
  8525.         --> returns T if the XM_STRING args are byte-for-byte equal,
  8526.             else NIL.
  8527.  
  8528.     A Note from XmStringByteCompare.3X manual page:
  8529.       "In general, if two compound strings are created with the
  8530.           same (char *) string using XmStringCreateSimple in the same
  8531.           language environment, the compound strings compare as equal.
  8532.           If two compound strings are created with the same (char *)
  8533.           string and the same character set other than
  8534.           XmSTRING_DEFAULT_CHARSET using XmStringCreate, the strings
  8535.           compare as equal.  The result of comparing a compound string
  8536.           created with XmStringCreate against a compound string
  8537.           created with XmStringCreateSimple is undefined.
  8538.  
  8539.           In some cases, once a compound string is put into a widget,
  8540.           that string is converted into an internal form to allow
  8541.           faster processing.  Part of the conversion process strips
  8542.           out unnecessary or redundant information.  If an application
  8543.           then does an XtGetValues to retrieve a compound string from
  8544.           a widget (specifically, Label and all of its subclasses), it
  8545.           is not guaranteed that the compound string returned is
  8546.           byte-for-byte the same as the string given to the widget
  8547.           originally."
  8548.  
  8549. *** XM_STRING_COMPARE == XmStringCompare():
  8550.  
  8551.     (XM_STRING_COMPARE <xmstring_a> <xmxtring_b>)
  8552.         --> returns T if the two XM_STRING args are "semantically equal",
  8553.             else NIL.
  8554.  
  8555.     A note from the XmStringCompare.3X manual page:
  8556.           "XmStringCompare returns a Boolean value indicating the
  8557.           results of a semantically equivalent comparison of two
  8558.           compound strings.
  8559.  
  8560.           Semantically equivalent means that the strings have the same
  8561.           text components, directions, and separators.  If character
  8562.           sets are specified, they must be equal as well.  In general,
  8563.           if two compound strings are created with the same (char *)
  8564.           string using XmStringCreateSimple in the same language
  8565.           environment, the compound strings compare as equal.  If two
  8566.           compound strings are created with the same (char *) string
  8567.           and the same character set other than
  8568.           XmSTRING_DEFAULT_CHARSET using XmStringCreate, the strings
  8569.           compare as equal.  The result of comparing a compound string
  8570.           created with XmStringCreate against a compound string
  8571.           created with XmStringCreateSimple is undefined."
  8572.  
  8573. *** XM_STRING_CONCAT == XmStringConcat():
  8574.  
  8575.     (XM_STRING_CONCAT <xmstring_a> <xmstring_b>)
  8576.         --> returns a new XM_STRING which is the concatenation of
  8577.             XM_STRINGs  <xmstring_a> and <xmstring_b>.
  8578.  
  8579. *** XM_STRING_COPY == XmStringCopy():
  8580.  
  8581.     (XM_STRING_COPY <xmstring>)
  8582.         --> returns a new XM_STRING, a copy of <xmstring>
  8583.     
  8584. *** XM_STRING_CREATE == XmStringCreate():
  8585.  
  8586.     (XM_STRING_CREATE <string> [<charset>])
  8587.         --> returns an XM_STRING version of string <string>.
  8588.  
  8589.     Create a compound string from STRING <text>. Optional argument
  8590.     <charset> is a STRING specifying an XmStringCharSet. If the
  8591.     <charset> argument is omitted, XmSTRING_DEFAULT_CHARSET is used.
  8592.     (Note that calling XM_STRING_CREATE with no <charset> argument is
  8593.     equivalent to calling Motif 1.1's XmStringCreateSimple()).
  8594.  
  8595.     Example values for <charset> would be "", which is equivalent to
  8596.     the C Motif constant XmSTRING_DEFAULT_CHARSET; another typical
  8597.     value is "ISO8859-1", which is equivalent to the C Motif constants
  8598.     XmSTRING_ISO8859_1, XmSTRING_OS_CHARSET, and XmFALLBACK_CHARSET.
  8599.  
  8600.     For Motif 1.1, potential values for <charset> are: "" (default)
  8601.     "ISO8859-1" "ISO8859-2" "ISO8859-3" "ISO8859-4" "ISO8859-5" "ISO8859-6"
  8602.     "ISO8859-7" "ISO8859-8" "ISO8859-9" "JISX0201.1976-0" "GB2312.1980-0"
  8603.     "GB2312.1980-1" "JISX0208.1983-0" "JISX0208.1983-1"
  8604.     "KSC5601.1987-0" "KSC5601.1987-1"
  8605.  
  8606. *** XM_STRING_CREATE_L_TO_R == XmStringCreateLtoR():
  8607.  
  8608.     (XM_STRING_CREATE_L_TO_R <text> [<charset>])
  8609.         --> returns an XM_STRING version of string <text>.
  8610.     
  8611.     Create a left-to-right compound string from STRING <text>. This
  8612.     function imposes the semantic of scanning for \n characters in the
  8613.     text. When one is found, the text up to that point is put into a
  8614.     segment followed by a separator component.  No final separator
  8615.     component is appended to the end of the compound string.  The
  8616.     direction defaults to left-to-right.  This function assumes that
  8617.     the encoding is single octet rather than double octet per character
  8618.     of text.
  8619.  
  8620.     Optional argument <charset> is a STRING specifying an XmStringCharSet.
  8621.     If the <charset> argument is omitted, XmSTRING_DEFAULT_CHARSET is used.
  8622.  
  8623.     Example values for <charset> would be "", which is equivalent to
  8624.     the C Motif constant XmSTRING_DEFAULT_CHARSET; another typical
  8625.     value is "ISO8859-1", which is equivalent to the C Motif constants
  8626.     XmSTRING_ISO8859_1, XmSTRING_OS_CHARSET, and XmFALLBACK_CHARSET.
  8627.  
  8628.     For Motif 1.1, other potential values for <charset> are: ""
  8629.     "ISO8859-1" "ISO8859-2" "ISO8859-3" "ISO8859-4" "ISO8859-5" "ISO8859-6"
  8630.     "ISO8859-7" "ISO8859-8" "ISO8859-9" "JISX0201.1976-0" "GB2312.1980-0"
  8631.     "GB2312.1980-1" "JISX0208.1983-0" "JISX0208.1983-1"
  8632.     "KSC5601.1987-0" "KSC5601.1987-1"
  8633.  
  8634.     Note that there also exists a Motif function XmStringLtoRCreate() --
  8635.     at the time of this writing XmStringCreateLtoR() and
  8636.     XmStringLtoRCreate() are the same, therefore I'm only providing
  8637.     WINTERP primitive XM_STRING_CREATE_L_TO_R.
  8638.  
  8639. *** XM_STRING_DIRECTION_CREATE == XmStringDirectionCreate():
  8640.  
  8641.     (XM_STRING_DIRECTION_CREATE :STRING_DIRECTION_L_TO_R)
  8642.          --> returns an XM_STRING with a single L->R direction component.
  8643.     (XM_STRING_DIRECTION_CREATE :STRING_DIRECTION_R_TO_L)
  8644.         --> returns an XM_STRING with a single R->L direction component
  8645.  
  8646. *** XM_STRING_EMPTY == XmStringEmpty():
  8647.  
  8648.     (XM_STRING_EMPTY <xmstring>)
  8649.         --> returns T if all segments in XM_STRING <xmstring> are
  8650.             zero length or if there are no text segments.
  8651.             Otherwise returns NIL.
  8652.  
  8653. *** XM_STRING_GET_L_TO_R == XmStringGetLtoR():
  8654.  
  8655.     (XM_STRING_GET_L_TO_R <xmstring> [<charset>])
  8656.         --> returns a STRING, or NIL if no matching character set found.
  8657.     
  8658.     This function will fetch the first text segment of the XM_STRING
  8659.     <xmstring> which matches the character set <charset>, and returns
  8660.     that as a STRING.
  8661.  
  8662.     Optional argument <charset> is a STRING specifying an XmStringCharSet.
  8663.     If the <charset> argument is omitted, XmSTRING_DEFAULT_CHARSET is used.
  8664.  
  8665.     Example values for <charset> would be "", which is equivalent to
  8666.     the C Motif constant XmSTRING_DEFAULT_CHARSET; another typical
  8667.     value is "ISO8859-1", which is equivalent to the C Motif constants
  8668.     XmSTRING_ISO8859_1, XmSTRING_OS_CHARSET, and XmFALLBACK_CHARSET.
  8669.  
  8670.     For Motif 1.1, potential values for <charset> are: "" (default)
  8671.     "ISO8859-1" "ISO8859-2" "ISO8859-3" "ISO8859-4" "ISO8859-5" "ISO8859-6"
  8672.     "ISO8859-7" "ISO8859-8" "ISO8859-9" "JISX0201.1976-0" "GB2312.1980-0"
  8673.     "GB2312.1980-1" "JISX0208.1983-0" "JISX0208.1983-1"
  8674.     "KSC5601.1987-0" "KSC5601.1987-1"
  8675.  
  8676. #ifdef MOTIF_1.1
  8677. *** XM_STRING_HAS_SUBSTRING == XmStringHasSubstring() [Motif 1.1 only]:
  8678.  
  8679.     (XM_STRING_HAS_SUBSTRING <xmstring> <xmsubstring>)
  8680.         --> returns T if XM_STRING <xmsubstring> is a substring of
  8681.             XM_STRING <xmstring>, else returns NIL.
  8682. #endif /* MOTIF_1.1 */
  8683.  
  8684. *** XM_STRING_LENGTH == XmStringLength():
  8685.  
  8686.     (XM_STRING_LENGTH <xmstring>)
  8687.         --> returns a FIXNUM representing the number of bytes in
  8688.             <xmstring> including all tags, direction indicators,
  8689.             and separators. 0 is returned if the compound string
  8690.             has an invalid structure.
  8691.  
  8692. *** XM_STRING_LINE_COUNT == XmStringLineCount():
  8693.  
  8694.     (XM_STRING_LINE_COUNT <xmstring>)
  8695.         --> returns a FIXNUM representing the number of lines
  8696.             in XM_STRING <xmstring>. 
  8697.  
  8698.     The effect of XM_STRING_LINE_COUNT is to count lines in the 
  8699.     XM_STRING argument. Actually, it returns the number of separators
  8700.     plus one...
  8701.  
  8702. *** XM_STRING_SEGMENT_CREATE == XmStringSegmentCreate():
  8703.  
  8704.     (XM_STRING_SEGMENT_CREATE <text> [<charset>] <direction> <separator_p>)
  8705.         --> returns a XM_STRING with the specified components:
  8706.         <text>, a STRING;
  8707.         <charset>, an optional STRING specifying a character set
  8708.         <direction>, a symbol, either :STRING_DIRECTION_L_TO_R, or
  8709.                                           :STRING_DIRECTION_R_TO_L;
  8710.         <separator_p>, a boolean; if non-NIL, a separator will be
  8711.         added immediately following the <text> component.
  8712.  
  8713.     For Motif 1.1, potential values for <charset> are: "" (default)
  8714.     "ISO8859-1" "ISO8859-2" "ISO8859-3" "ISO8859-4" "ISO8859-5" "ISO8859-6"
  8715.     "ISO8859-7" "ISO8859-8" "ISO8859-9" "JISX0201.1976-0" "GB2312.1980-0"
  8716.     "GB2312.1980-1" "JISX0208.1983-0" "JISX0208.1983-1"
  8717.     "KSC5601.1987-0" "KSC5601.1987-1"
  8718.  
  8719. *** XM_STRING_SEPARATOR_CREATE == XmStringSeparatorCreate():
  8720.  
  8721.     (XM_STRING_SEPARATOR_CREATE)
  8722.         --> returns an XM_STRING with a single component, a separator.
  8723.  
  8724. ==============================================================================
  8725.  
  8726. * Future work, missing features.
  8727.  
  8728.     If you add any of the features described below, please send your
  8729.     modifications to me at mayer@hplabs.hp.com or hplabs!mayer.
  8730.  
  8731. ** Support for Multiple Displays.
  8732.  
  8733.     The X11r3 toolkit upon which Motif 1.0 is based does not support 
  8734.     multiple displays properly, and therefore Motif 1.0 does not
  8735.     support multiple displays either. The X11r4 Xtoolkit supposedly
  8736.     supports multiple displays, so we might expect bug-free multiple
  8737.     display support in Motif 1.1 (??). Eventually, I hope to update
  8738.     WINTERP to support multiple display.
  8739.  
  8740. ** <Xm/CutPaste.h> -- XmClipboard functionality.
  8741.  
  8742.     The following Motif functionality is missing from WINTERP
  8743.     I didn't get around to adding these due to lack of time and 
  8744.     interest. I'm sure I'll be needing this functionality eventually,
  8745.     so you can expect that they'll be included in a future WINTERP
  8746.     release. Feel free to interface these functions and send me your code!
  8747.  
  8748.         XmClipboardBeginCopy(), XmClipboardStartCopy(),
  8749.         XmClipboardCopy(), XmClipboardEndCopy(), XmClipboardCancelCopy(),
  8750.         XmClipboardCopyByName(), XmClipboardUndoCopy(),
  8751.         XmClipboardLock(), XmClipboardUnlock(),
  8752.         XmClipboardStartRetrieve(), XmClipboardRetrieve(),
  8753.         XmClipboardEndRetrieve(), XmClipboardInquireCount(),
  8754.         XmClipboardInquireFormat(), XmClipboardInquireLength(),
  8755.         XmClipboardInquirePendingItems(), XmClipboardWithdrawFormat(),
  8756.         XmClipboardRegisterFormat().
  8757.  
  8758. ** <X11/Selection.h> -- X11r3 selection capabilities.
  8759.  
  8760.     The following Motif functionality is missing from WINTERP
  8761.     I didn't get around to adding these due to lack of time and 
  8762.     interest. Are these really necessary if we interface XmClipboard??
  8763.  
  8764.         XtOwnSelection(), XtDisownSelection(), XtGetSelectionValue(),
  8765.         XtGetSelectionValues(), XtSetSelectionTimeout(),
  8766.         XtGetSelectionTimeout().
  8767.  
  8768. ** <X11/Protocols.h> -- Window Manager Protocol interfaces.
  8769.  
  8770.     The following Motif functionality is missing from WINTERP
  8771.     I didn't get around to adding these due to lack of time and 
  8772.     interest.
  8773.  
  8774.         XmAddWMProtocols(), XmRemoveWMProtocols(), 
  8775.         XmAddWMProtocolCallback(), XmRemoveWMProtocolCallback(),
  8776.         XmActivateWMProtocol(), XmDeactivateWMProtocol(),
  8777.         XmSetWMProtocolHooks(), XmAddProtocols(),
  8778.         XmRemoveProtocols(), XmAddProtocolCallback(), 
  8779.         XmRemoveProtocolCallback(), XmActivateProtocol(),
  8780.         XmDeactivateProtocol(), XmSetProtocolHooks()
  8781.  
  8782. ** <X11/PassivGrab.h>
  8783.  
  8784.     The following Motif functionality is missing from WINTERP
  8785.     I didn't get around to adding these due to lack of time and 
  8786.     interest. Using these with Motif could cause problems anyways.
  8787.  
  8788.         XtGrabKey(), XtUngrabKey(), XtGrabKeyboard(), XtUngrabKeyboard()
  8789.  
  8790. ** XtAddInput()/XtRemoveInput():
  8791.  
  8792.     It might be nice provide some high-level Lisp interfaces that use
  8793.     XtAddInput():
  8794.  
  8795.     One interface would allow for functionality similar to gnuemacs'
  8796.     "process-sentinel" capabilities but using XtAddInput() for proper
  8797.     integration into the Xtoolkit's event-driven style. This would give
  8798.     WINTERP the ability to concurrently run a subprocess while still
  8799.     responding to Lisp and X events. (In contrast to POPEN and SYSTEM,
  8800.     which cause WINTERP to block until the subprocess terminates)
  8801.  
  8802.     Another high-level interface would allow you to create other TCP,
  8803.     and UDP sockets    and attach Lisp code that responds to input on
  8804.     these sockets.
  8805.  
  8806. ** XtAppAddWorkProc()/XtAppRemoveWorkProc():
  8807.  
  8808.     This might be useful for scheduling periodic garbage collects that
  8809.     can occur when WINTERP is otherwise idle.
  8810.  
  8811. ** Missing XmString and XmFontList functionality:
  8812.  
  8813.     XmStringFreeContext(), XmStringGetNextComponent(), 
  8814.     XmStringPeekNextComponent(), XmStringGetNextSegment(), 
  8815.     XmFontListCreate(), XmStringCreateFontList(), XmFontListFree(),
  8816.     XmFontListAdd(), XmFontListCopy(), XmStringNConcat(),
  8817.     XmStringNCopy(), XmStringBaseline(), XmStringWidth(), XmStringHeight(),
  8818.     XmStringExtent(), XmStringDraw(), XmStringDrawImage(), 
  8819.     XmStringDrawUnderline().
  8820.  
  8821.     If you need any of the above, feel free to add them to
  8822.     ./../src-server/w_XmString.c and send me the changes....
  8823.  
  8824. ** More interactive builder-like functions:
  8825.  
  8826. *** Widget and Resource "palette"
  8827.     
  8828.     It gets tedious having to remember widget class names and resource
  8829.     names. Create a browser that will allow you to visually construct
  8830.     the arguments for widget creation and widget :set_values.
  8831.  
  8832.     Such functionality would serve as the basis for a builder. Much of this
  8833.     could be done in Lisp, without having to modify C code.
  8834.  
  8835. *** Interactively place a newly created widget inside a manager.
  8836.  
  8837. *** Interactively move existing widgets around.
  8838.  
  8839. *** Colorpicker:
  8840.  
  8841.     Be able to mouse on a color-source widget followed by a
  8842.     color-destination widget. The color-destination widget will take on
  8843.     the background/foreground colors of another widget.
  8844.  
  8845.     Allow optional creation of a palette of widgets for picking
  8846.     specific preset color combinations.
  8847.  
  8848.     Both of these could easily be done as Lisp-only extensions to
  8849.     WINTERP. See ./../examples/colorsetr.lsp for a first attempt...
  8850.     
  8851. *** Resource browser:
  8852.  
  8853.     Be able to bring up a browser that allows you to inspect and alter
  8854.     the resources on a widget. Alterations on a widget are returned
  8855.     as name/value pairs that can be passed on to future invocations of
  8856.     :set_values or :new.
  8857.